摘要: 关于计算理论的一些概念 —判定问题和最优化问题 —归约 —多项式时间 —抽象问题 —形式语言体系NPC证明 —一个问题转换为判定问题 —说明问题是NP —一个NPC问题规约到这个问题 —只需要规约到这个抽象问题的一个具体问题就可以了 这个具体问题是NPC那么它的整个抽象问题也是NPC的 —比如背包问题,可以人为设置它的容量和价值下界为特定的值 阅读全文
posted @ 2013-06-16 21:51 siyudemo 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 代价函数 —当前取得的价值+后面可以取得的最大价值 —如果这个价值比之前得到的路径的价值的最大值都小的话,那么这个分支不再需要继续延伸分支策略 —分支较少的结点先展开 —预计可以得到较多解的结点先展开 —每个节点的代价函数会有多个 —下一步解空间的计算Sk:如果直接越界了那么就不需要展开这个结点 —代价函数:如果比较小的话这个结点也不需要展开对称性 —比如n皇后问题,可以又中线纵轴分成等价的两部分的搜索空间搜索顺序 —对关键词从小到大 —对关键词从大到小 —更换关键词,选择新的搜索方法 —装箱问题中,可以以箱子的角度来回溯,... 阅读全文
posted @ 2013-06-14 22:07 siyudemo 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 贪心法的证明 —归纳证明: —贪心法使用的条件是:最优子结构和贪心选择正确性 —贪心算法是一步一步实现的, —在归纳证明的时候,贪心的第一步贪心选择策略的正确性就是归纳基础,因为以后都是一个子问题的选取,每次都需要进行第一步的选择 —归纳步骤 —假设进行到第k步贪心选择都是正确的,证明第k+1步贪心选择也是正确的 —归纳过程 —归纳基础:第一步贪心选择的正确性,常常用 cut and paste 的思想证明贪心选择得到最优子结构 —如果现在有一个最优解,第一步选择未知,但是第一步选择明显可以换成贪心选项,那么说明选择第一步贪心选... 阅读全文
posted @ 2013-06-14 20:55 siyudemo 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 在某些应用中,在开始的时候无法预知表中需要存储多少对象。 需要根据对象的多少调整所需要的存储空间插入算法 — —如果满了就分配一个二倍大小的新空间 —一次插入操作的代价 —简单分析:最坏情况每次都要扩张动态表,需要O(n)的复杂度 —聚集法:只有在表内元素数为2的幂次的时,表才会扩张,在这些情况下一次的代价才是O(n)的 —求和是,单领出2的幂次的项,这些项的个数不是线性的,而是logn项的 —聚集法需要发现操作中突然变大的个别操作 —记账法:插入付费3块钱,1块钱给最后插入的对象(扩张时复制当前元素的代价),1块钱用于给一个已经没... 阅读全文
posted @ 2013-06-13 21:04 siyudemo 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 两个已排好顺序的序列A,B 长度为m,n,寻找第k大的数 —第一次取出a[k/2], b[k/2]两个数比较 —如果两个数相邻,那么找到了 较大的数的前一个是比较小的数小,较小的数的后一个比较大的数大 —如果两个数不相邻,那么 k/4地找寻找最大值和最小值:比较次数 3n/2-2 —先两两进行比较,得到胜者组和败者组:n/2 —分别在组内找到最大值和最小值:2* (n/2 - 1)寻找最大值和次大值:比较次数n+logn —先找到最大值,利用胜者树:T(n) = T(n/2) + n/2 = n-1 —先两两比较:n/2 —递归下去:T(n/... 阅读全文
posted @ 2013-06-13 18:38 siyudemo 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 算法正确性——循环不变式算法复杂度的计算方法一 代换法 —局部代换 这里直接对n变量进行代换 —替换成对数或者指数的情形 n = 2^m —整体代换 这里直接对递推项进行代换 —替换成内部递推下标的形式 T(2^n) = S(n)方法二 递归树法 —用实例说明 —分析每一层的内容 —除了递归项的内容拿出来,如第一种树把T(n-kn)作为下一层进行计算 —递归项按层写出方法三 主定理 —f(n)必须是n的多项式规模的才能使用主定理 — —f(n)比较小,那么前面a,b确定的复杂度做主导 —f(n)和a,b持平,那... 阅读全文
posted @ 2013-06-13 09:36 siyudemo 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 首先要利用网络流去给题目设计算法,就要满足网络流的基本要求: —容量限制 —流守恒性 —反对称性 —上面三个性质可以在正流和净流上定义,这样定义的结果就是, 既可以满足一些限制(容量限制可以具体为别的限制), 又可以使得有“流”的结果。进出是一样的,还可以在后面讨论最大的结果。流的简单性质:点组的性质 —f(X,X) = 0; —f(X,Y) = -f(Y,X); —f(X或Y,Z) = 和,但是需要X,Y不相交;最大流最小割定理 —三条性质保证定理 —流网络的割: —任意流和在这个流下定义的一个割(源点和汇点必须分属两个分区... 阅读全文
posted @ 2013-06-08 11:48 siyudemo 阅读(238) 评论(0) 推荐(0) 编辑
摘要: INT n/INTO/INT 3 - 调用中断过程操作码指令说明CCINT 3中断 3 - 调试器陷阱CDibINTimm8立即数字节指定的中断矢量编号CEINTO中断 4 - 如果上溢标志是 1说明INTn指令生成对目标操作数指定的中断或异常处理程序的调用(请参阅“IA-32 英特尔(R) 体系结构软件开发人员手册”第 1 卷第 6 章中标题为“中断与异常”的部分)。目标操作数指定从 0 到 255 的中断矢量编号,编码形式是 8 位无符号立即数。每个中断矢量编号提供一个指向 IDT 中的门描述符的索引。头 32 个中断矢量编号由英特尔(R)保留供系统使用。其中一些中断用于内部生成的异常。I 阅读全文
posted @ 2013-04-14 21:01 siyudemo 阅读(986) 评论(0) 推荐(0) 编辑
摘要: CLI禁止中断发生STL允许中断发生 这两个指令只能在内核模式下执行,不可以在用户模式下执行;而且在内核模式下执行时,应该尽可能快的恢复中断,因为CLI会禁用硬件中断,若长时间禁止中断会影响其他动作的执行(如移动鼠标等等),系统就会变得不稳定。在标志寄存器中中断标志清零的情况下,可以以“int ××”的形式调用软中断。 程序员可以改变段地址和偏移地址,但是在这个过程中如果需要改变段寄存器SS和SP必须禁止中断,当改变完成后再恢复中断(也就是说在cli指令后需要有与其配对的sti指令,否则计算机--最常见的反应就是崩溃)在对 ss 和sp操作的时候, 如果有中断发生,中断的保 阅读全文
posted @ 2013-04-14 16:04 siyudemo 阅读(733) 评论(0) 推荐(0) 编辑
摘要: 1 #include<stdio.h> 2 int main() 3 { 4 int n,a,b,c,d,e,f,x,y; 5 int u[4]={0,5,3,1}; 6 while(1) 7 { 8 scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f); 9 if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0)10 break;11 /*12 统计单独占一个打包的个数13 6,5,4都 阅读全文
posted @ 2013-03-29 17:37 siyudemo 阅读(223) 评论(0) 推荐(0) 编辑