« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
公告 |
本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!
——既瑜 |
统计 |
blog名称:★既瑜★ 日志总数:183 评论数量:636 留言数量:-25 访问次数:1405526 建立时间:2005年3月12日 |
OICQ:215768265
njucs2001@hotmail.com
erichoo1982@gmail.com |
|
W3CHINA Blog首页 管理页面 写新日志 退出
[【技术文档】]关于goto语句(starfish) |
在60年代末和70年代,关于goto语句的争论是比较激烈的。
主张从高级语言中去掉goto语句的人认为:goto语句是对程序结构影响最大的一种有害语句;他们的主要理由是:goto语句使程序的静态结构和程序的动态执行之间有很大的差别,这样使程序难以阅读,难以查错。对一个程序来说,人们最关心的是他运行的正确与否,去掉goto语句后,可以直接从程序结构上反映程序的运行过程。这样,不仅使程序的结构清晰、便于阅读,便于查错,而且也有利于程序正确性的证明。
持不同意见者认为,goto语句使用起来比较灵活,而且有些情形能够提高程序的效率。如果一味强调删除goto语句,有些情形反而会使程序过于复杂,增加一些不必要的计算量。
1974年, D.E.Knuth (算法界的超级大牛,The art of computer programming 的作者)对于goto语句的争论作了全面的公正的评述,他的基本观点是:不加限制地使用goto语句,特别是使用往回跳的goto语句,会使程序的结构难于理解,这种情形应该尽量避免使用goto语句;另外,为了提高程序
|
阅读全文(1799) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(7)--操作系统之3种页面置换算法[转载] |
1.问题描述及设计思想:在进程运行过程中,若其所要访问的页面不在内存需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,所以需要根据一定的算法来确定。以下分别是三个算法的设计思想。 OPTIMAL:最佳置换算法。其所选择的被淘汰页面,将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面。 FIFO:先进先出置换算法。该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。 LRU:最近最久未使用置换算法。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的给予淘汰。
#include <iostream.h>
#define Bsize 3 #define Psize 20
struct pageInfo
|
阅读全文(2810) | 回复(1) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(6)--分支限界法之LC 0/1背包[转载] |
1.问题描述:已知有N个物品和一个可以容纳M重量的背包,每种物品I的重量为WEIGHT,一个只能全放入或者不放入,求解如何放入物品,可以使背包里的物品的总效益最大。
2.设计思想与分析:对物品的选取与否构成一棵解树,左子树表示不装入,右表示装入,通过检索问题的解树得出最优解,并用结点上界杀死不符合要求的结点。
(多谢shadow同学提供该算法)
#include <iostream.h>
struct good { int weight; int benefit; int flag;//是否可以装入标记 };
int number=0;//物品数量 int upbound=0; int curp=0, curw=0;//当前效益值与重量 int maxweight=0; |
阅读全文(2449) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(5)--动态规划之allPath[转载] |
1.问题描述:设G=(V,E)是一个有N个结点的有向图。又设C是G是成本邻接矩阵,其中C(i,i)=0,1<=i<=n;当<i,j>属于E(G)时,C(i,j)表示边<i,j>的成本;当i不等于j且<i,j>不属于E(G)时,C(i,j)等于无穷(用一个较大的数表示)。求出每对结点之间的最短路径。
2.设计思想与分析: 基本思路:首先决策哪个结点是该路径上的具有最大编号的中间结点K,然后就再去求取由I到K和由K到J这对结点间的最短路径,再把中间结点K记录下来。若是结点I,J间不用经过其他结点就能得到最短路径则把本身的成本保留下来,且不记录中间结点。
(本设计的遍历有问题,不能遍历经过2个结点的路径,一直没有修改。)
#include <iostream.h> int const m=4;
stru
|
阅读全文(2151) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(4)--回溯法之N皇后问题[转载] |
1.问题描述:在一个N*N的棋盘上放置N个皇后,且使得每两个之间不能互相攻击,也就是使得每两个不在同一行,同一列和同一斜角线上。
2.设计思想与分析: 基本思路:X(j)表示一个解的空间,j表示行数,里面的值表示可以放置在的列数,抽象约束条件得到能放置一个皇后的约束条件(1)X(i)!=X(k);(2)abs(X(i)-X(k))!=abs(i-k)。应用回溯法,当可以放置皇后时就继续到下一行,不行的话就返回到第一行,重新检验要放的列数,如此反复,直到将所有解解出。
#include <iostream.h> #include <math.h>
/*检查可不可以放置一个新的皇后*/ bool place(int k, int *X) { int i; i=1; while(i<k)
|
阅读全文(2880) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(3)--生成最优归并树[转载] |
1.问题描述:把N个已分类的文件通过成对地重复归并已分类的文件归并在一个文件中。例如,假定X1,X2,X3,X4是要归并的文件,则可以首先把X1,X2归并成Y1,然后Y1和X3归并成Y2,最后Y2和X4归并,从而得到要的分类文件。运用最优二路归并方法,归并出来的结果都有想对应的最小权带外部路径的二元树,所以把问题转换为由N棵根结点带权值的树组成的森林,归并成为一棵二元树。
2.设计思想与分析: 基本思路:(1)假设给定的一组权值{W1,W2,……,Wn},由此可以产生出由N棵二元树组成的森林F={T1,T2,……,Tn},其中每棵树都有一个权值为Wi的根结点;(2)在森林F中选出两棵树根结点的权值最小的树,作为一棵新树的左右子树且置新树的根结点的权值为其左右子树的根结点的权值之和;(3)从森林F中删去分别做为左右子树的这两棵树,同时将新树加入到集合F中;(4)对新的森林重复2,3步骤,直到F中只剩一棵二元树时为止,这就是所要的树了。
#
|
阅读全文(2007) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(2)--快速排序与插入排序的比较[转载] |
快速排序基本思想:选取A为某个元素,例如说t=A(s),然后将其它的元素重新排列,使A(1:n)中的所有在t以前的元素都小于或等于t,而所有在t之后的元素都大于或等于t。
//语言:c++ //目的:比较两个排序算法的时间复杂度 //原代码: //Insertionsort int *Insertionsort(int *A,int n) { int j,item,i; for(j=2;j<=n;j++) { item=A[j]; i=j-1;
while (item<A[i]) { A[i+1]=A[i]; i--; |
阅读全文(2596) | 回复(0) | 编辑 | 精华 | 删除 |
[【技术文档】]算法连载(1)--贪心法之背包问题[转载] |
贪心方法:总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。
应用:1:该问题可以通过“局部寻优”逐步过渡到“整体最优”。贪心选择性质与“动态规划”的主要差别。
2:最优子结构性质:某个问题的整体最优解包含了“子”问题的最优解。
代码如下:
#include <iostream.h>
struct goodinfo { float p; //物品效益 float w; //物品重量 float X; //物品该放的数量 int flag; //物品编号 };//物品信息结构体
void Insertionsort(goodinfo goods[],int n) {
|
阅读全文(15896) | 回复(4) | 编辑 | 精华 | 删除 |
[【技术文档】]来自 COM 经验的八个教训(Jeff Prosise) |
本文转载自微软中国社区:http://www.microsoft.com/china/MSDN/library/windev/COMponentdev/CDwickedtoc.mspx
发布日期:5/20/2004 更新日期:5/20/2004
原文出处:Wicked Code: Eight Lessons from the COM School of Hard Knocks (Jeff Prosise)
在日常工作中,我看到过许多由不同开发人员编写的 COM 代码。我为许多富于创造性的使用 COM 的工作方式感到惊讶,有一些使 COM 工作的巧妙代码可能连 Microsoft 都没有想到。同样,看到一些错误一次又一次地重犯,使我免不了心灰意懒。这些错误很多都与线程和安全有关,完全不成比例,而这也正是 COM 文档资料中最缺少的两个领域。如果不仔细计
|
阅读全文(3246) | 回复(0) | 编辑 | 精华 | 删除 |
|