随笔分类 -  Data structure and Algorithm

摘要:1.选择排序定义:首先,选出数组中最小的元素,将它与数组中第一个元素交换。然后找出次小的元素,并将它与数组中第二个元素交换。按照这种方法一直进行下去,直到整个数组排完序。交换次数:N-1 缺点:运行时间对文件已有序的部分依赖较少,从文件中选出最小元素的每一遍操作过程,并没有给出下一遍要找的最小元素的位置的相关消息。例如,该程序对已排好序的文件或各元素都相同的元素文件与对随机排列的文件排序所花的时间基本相同。适用性:对于元素比较大,关键字又比较小的文件,应该选择该方法,而其他算法移动数据的步数都比选择排序更多。sc(source code):template <typename T, ty 阅读全文
posted @ 2011-07-29 16:36 独酌逸醉 阅读(15431) 评论(0) 推荐(0) 编辑
摘要:/* 主题: 连通性问题 * 问题表述: 给定整数对的一个序列,其中每个整数表示某种类型的一个对象,我们想要说明对p-q表示“p链接到q”。 * “连通”关系是可传递的,即p-q,q-r,则p-r。我们的目标是写一个过滤集合中的无关对的程序。程序的 * 输入为p-q,如果已经看到的到那点的数对并不隐含着p连通到q,那么输出该对。如果前面的对确实隐含 * 着p连通到q,那么程序应该忽略p-q,并应该继续输入下一对。 * 开发语言: C++ * 编译器: g++ * 作者: chinazhangjie * 邮箱: chinajiezhang@gmail.com * 参考书籍: 《算法: C语言实现 阅读全文
posted @ 2011-06-22 22:38 独酌逸醉 阅读(2538) 评论(0) 推荐(0) 编辑
摘要:去年大一下学数据结构的时候,学到了快速排序,记得当时怎么都不理解~!尤其不理解递归的实现。  今天复习算法的时候发现并不是当时想的那么难,于是就代码实现了一下!我们都知道快排的效率高低取决于基准元素(这个可能不同的人叫法不一样,就是交换轴,我想你懂的,O(∩_∩)O~)的选择,一般我们选取第一个元素(或某一个),但是这样选取可能会导致快排的最低效率。还可以随机选取一个元素作为基准元素。代码:[代码]理论上来说,随机取值回比直接选取效率要高一下,但是一开始测试的结果确实相反的,无论我采用多大的数组,直接选取效率要高于随机取值效率高。后来我仔细想了一下,在我的程序中交换消耗的时间可能要比获得随机数 阅读全文
posted @ 2010-12-09 17:33 独酌逸醉 阅读(4251) 评论(16) 推荐(1) 编辑
摘要:一、图灵机根据有限状态控制器的当前状态及每个读写头读到的带符号,图灵机的一个计算步可实现下面3个操作之一或全部。(1)改变有限状态控制器中的状态。(2)清除当前读写头下的方格中原有带符号并写上新的带符号。(3)独立地将任何一个或所有读写头,向左移动一个方格(L)或向右移动一个方格(R)或停在当前单元不动(S)。k带图灵机可形式化地描述为一个7元组(Q,T,I,δ,b,q0,qf),其中:(1)Q是有限个状态的集合。(2)T是有限个带符号的集合。(3)I是输入符号的集合。(4)b是唯一的空白符,b∈T-I。(5)q0是初始状态。 (6)qf是终止(或接受)状态。(7)δ是移动函数。它是从Q×T 阅读全文
posted @ 2010-12-06 19:56 独酌逸醉 阅读(8341) 评论(4) 推荐(0) 编辑
摘要:设G=(V,E)是无向连通带权图,即一个网络。E中的每一条边(v,w)的权为c[v][w]。如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树。构造最小生成树的两种方法:Prim算法和Kruskal算法。一、最小生成树的性质设G=(V,E)是连通带权图,U是V的真子集... 阅读全文
posted @ 2010-12-02 12:37 独酌逸醉 阅读(23017) 评论(5) 推荐(7) 编辑
摘要:贪心算法顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。问题一、活动安排问题问... 阅读全文
posted @ 2010-11-23 13:11 独酌逸醉 阅读(80938) 评论(26) 推荐(26) 编辑
摘要:动态规划算法总体思想动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。动态规划基本步骤:(1)找出最优解的性质,并刻划其结构特征。(2)递归... 阅读全文
posted @ 2010-11-16 12:17 独酌逸醉 阅读(23234) 评论(13) 推荐(14) 编辑
摘要:一、随机数  随机数在概率算法设计中扮演着十分重要的角色。在现实计算机上无法产生真正的随机数,因此在概率算法中使用的随机数都是一定程度上随机的,即伪随机数。线性同余法是产生伪随机数的最常用的方法。由线性同余法产生的随机序列a0,a1,…,an满足  其中b >= 0,c >= 0,d <= m。d称为该随机序列的种子。如何选取该方法中的常数b、c和m直接关系到所产生... 阅读全文
posted @ 2010-11-11 15:23 独酌逸醉 阅读(14562) 评论(1) 推荐(4) 编辑
摘要:三、0-1背包问题 问题描述 给定n种物品和一背包。物品i的重量是wi,其价值为pi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 0-1背包问题是一个特殊的整数规划问题。 例如: 最优解为:(1,0,1) 此时的价值为:6 算法的思想 首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。 在下面描述的优先队列分支限界法中,节点的优先级由已装袋的... 阅读全文
posted @ 2010-11-08 16:28 独酌逸醉 阅读(4575) 评论(0) 推荐(0) 编辑
摘要:二、装载问题1. 问题描述有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为Wi,且。装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。容易证明:如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。 (1)首先将第一艘轮船尽可能装满;(2)将剩余的集装箱装上第二艘轮船。   将第一艘轮船尽可能装满等价于选取全体集装箱... 阅读全文
posted @ 2010-11-07 21:34 独酌逸醉 阅读(5653) 评论(1) 推荐(0) 编辑
摘要:分支限界法分支限界法与回溯法分支限界法的基本思想常见的两种分支限界法一、单源最短路径问题1、问题描述在下图所给的有向图G中,每一边都有一个非负边权。要求图G的从源顶点s到目标顶点t之间的最短路径。 测试数据(图) 阅读全文
posted @ 2010-11-01 13:16 独酌逸醉 阅读(32881) 评论(5) 推荐(7) 编辑
摘要:四、0-1背包问题五、旅行售货员问题问题表述:在图中找到一个权最小的周游路线解空间:排列树剪枝策略:当前路径的权重+下一个路径的权重 < 当前的最小权重,则搜索该路径实现:参考书籍 《算法设计与分析(第二版)》 王晓东 编著授课教师 张阳教授 阅读全文
posted @ 2010-10-26 20:12 独酌逸醉 阅读(2687) 评论(4) 推荐(1) 编辑
摘要:二、批处理作业调度问题表述:给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。显然,1,3,... 阅读全文
posted @ 2010-10-24 23:29 独酌逸醉 阅读(2519) 评论(1) 推荐(0) 编辑
摘要:回溯法1、有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。2、回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。3、回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含(剪枝过程),则跳过... 阅读全文
posted @ 2010-10-22 16:00 独酌逸醉 阅读(22394) 评论(1) 推荐(3) 编辑
摘要:棋盘覆盖分析算法复杂度实现[代码]线性时间选择给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素。思想//在数组a的p到r区间内找到第k小的元素template<classType>TypeRandomizedSelect(Typea[],intp,intr,intk){if(p==r)returna[p];//如果p,r相等,第n小都是a[p... 阅读全文
posted @ 2010-10-13 21:43 独酌逸醉 阅读(3186) 评论(2) 推荐(0) 编辑
摘要:例5 整数划分问题将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。正整数n的不同划分个数称为正整数n的划分数,记作p(n)。例如正整数6有如下11种不同的划分,所以p(6) = 11: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1... 阅读全文
posted @ 2010-10-07 16:35 独酌逸醉 阅读(5572) 评论(0) 推荐(0) 编辑
摘要:算法总体思想  对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。示例:例1阶乘函数阶乘函数可递归地定义为:边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果。实现:[代码]例2Fibonacci数列实现:[代码]Code highlighting produced b... 阅读全文
posted @ 2010-10-07 11:46 独酌逸醉 阅读(4919) 评论(3) 推荐(0) 编辑
摘要:算法引论何谓算法(Algorithm)通俗的讲,算法是指解决问题的一种方法或一个过程。严格的讲,算法是若干指令的有穷序列,满足性质:(1)输入:有零个或者多个外部量作为算法的输入。(2)输出:算法产生至少一个量作为输出。(3)确定性:组成算法的每条指令是清晰,无歧义的。(4)有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。何谓程序(Program)程序是算法用某种程序设计语言的具体实现。程序可以不满足算法的性质(4)即有限性。例如操作系统,它是在无限循环中执行的程序,因而不是算法。然后可把操作系统的各种任务看成一些单独的问题,每一个问题由操作系统中的一个子程序通过特定的 阅读全文
posted @ 2010-10-01 17:11 独酌逸醉 阅读(1921) 评论(2) 推荐(0) 编辑

点击右上角即可分享
微信分享提示