算法至上
文章平均质量分 75
wteo
这个作者很懒,什么都没留下…
展开
-
最长公共子序列LCS
最长公共子序列(LCS)算法 输入:随机生成两条字符序列,长度最少为10000。 输出:求解时间,最长公共子序列及其长度。 算法思想:设X=和Y=为两个序列,并设Z=为X和Y的任意一个LCS1. 如果xm=yn=zk,那么Zk-1是Xm-1和Yn-1的一个LCS2. 如果xm不等于yn,那么zk不等于xm蕴含Z是Xm-1和Y的一个LCS3. 如果xm不等于yn,那原创 2014-01-02 13:43:35 · 1089 阅读 · 0 评论 -
循环赛日程表问题
问题描述:设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程:每个选手必须与其他n-1个选手各赛一场;每个选手一天只能赛一场;循环赛一共进行n-1天。idea: Divide and conquer源码如下:#include #include原创 2014-02-06 15:23:43 · 1890 阅读 · 0 评论 -
Anagrams(字母易位造词法) strings 检测算法
题目:Write a method to decide if two strings are anagrams or not.解法:两种解法如下:#include #include #include using namespace std;bool isAnagram1(string s, string t){ if(s=="" || t=="") return原创 2014-03-14 10:47:22 · 1165 阅读 · 0 评论 -
字符串旋转检测算法
题目:Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSub原创 2014-03-14 13:17:37 · 899 阅读 · 0 评论 -
回溯算法
搜索算法介绍(1)穷举搜索(Exhaustive Search)(2)盲目搜索(Blind or Brute-Force Search)深度优先(DFS)或回溯搜索(Backtracking);广度优先搜索(BFS);迭代加深搜索(Iterative Deepening);分枝限界法(Branch & Bound);博弈树搜索(α-β Search)(3)启发式搜索(H原创 2014-04-07 20:38:37 · 2868 阅读 · 1 评论 -
蓄水池抽样(Reservoir Sampling)分析
其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况。应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的,但又要保持随机性。在高德纳的计算机程序设计艺术中,有如下问题:“可否在一未知大小的集合中,随机取出一元素?”原创 2014-03-24 14:47:07 · 1024 阅读 · 0 评论 -
矩阵翻转算法
题目:Given an image represented by an NxN matrix, where each pixel in the image is 4 byteswrite a method to rotate the image by 90 degrees. Can you do this in place?解决思想:顺时针:先将矩阵转置 再将依次将各行首尾原创 2014-03-14 00:32:26 · 3112 阅读 · 0 评论 -
Branch and Bound
基本思想在解空间树中, 以广度优先BFS或最佳优先方式搜索最优解, 利用部分解的最优信息, 裁剪那些不能得到最优解的子树以提高搜索效率。搜索策略是:在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展结点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(优先值),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点作原创 2014-01-13 10:45:40 · 1549 阅读 · 0 评论 -
最佳调度问题的回溯算法
问题描述:设有n个任务由k个可并行工作的机器来完成,完成任务i需要时间t_i,试设计算法找出这n个任务的最佳调度,使完成全部任务的时间最早要求:随机生成n(n>=20)个任务的所需时间,由k(取3~10)个机器完成,分别给出对应于每个k值的最佳任务调度方案,以及完成全部任务的时间算法思想:每个任务有K个选择所要在的机器,即解空间树是一颗满K叉树,同时也是一棵子集树。采用深度优先原创 2014-01-12 17:43:13 · 5154 阅读 · 1 评论 -
贪心算法
基本思想从问题的某一个初始解出发,通过一系列的贪心选择——当前状态下的局部最优选择,逐步逼近给定的目标,尽可能快地求得更好的解。在贪心算法(greedy method)中也采用逐步构造最优解的方法。在每个阶段,都作出一个按某个评价函数最优的决策,该评价函数最优称为贪心准则(greedy criterion)。贪心算法的正确性,就是要证明按贪心准则求得的解是全局最优解。贪心算法不能对原创 2014-01-12 19:52:20 · 1628 阅读 · 0 评论 -
线性时间的排序
一、排序的下界判定树模型:任何基于比较的排序可以用一棵二叉树表示,其叶子节点代表排序结果。定理:在最坏情况下,任何比较排序算法都需要做Ὼ(nlogn)次比较。二、计数排序基本思想:统计小于或等于A[i]的元素数目,将A[i]置入相应的位置,即 A[i]→B[小于或等于A[i]的元素数目] 问题:n个互不相同的整数A[1..n],1≤A[i]≤n i=1~n算法:Spe原创 2014-01-11 19:55:09 · 761 阅读 · 0 评论 -
Huffman编码实现
算法思想:哈夫曼编码算法基于贪心算法从叶子节点到根节点的方向编码的。一.为每个符号建立一个叶子节点,并加上其相应的发生频率。二.当有一个以上的节点存在时,进行下列循环:把这些节点作为带权值的二叉树的根节点,左右子树为空选择两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且至新的二叉树的根结点的权值为其左右子树上根结点的权值之和。把权值最小的两个根节点移除将新的二叉树加原创 2014-01-12 17:25:28 · 1067 阅读 · 0 评论 -
区间树上的重叠区间查找算法
要求:对实验二的红黑树进行扩展,构造1000个节点的区间树,在区间树上查找具有最小低端点的重叠区间思想:1.对红黑树节点的扩展:每个节点结构如下:typedef structnode{ timeval itimeval; //时间区间 int key; //关键字:区间中的低端节点值 int max;//Max(pnode->left-原创 2014-01-12 17:12:58 · 2321 阅读 · 0 评论 -
红黑树插入算法的实现
思想:将插入的节点着色为红色插入红黑树中,然后再调用一个辅助程序对节点重新着色并旋转以保证红黑树的性质得以继续保持。调整程序主要处理为三种情况CASE1:当前调整节点的叔叔是红色的。CASE2:当前调整节点的叔叔是黑色的,而且当前调整节点是右孩子。CASE3:当前调整节点的叔叔是黑色的,而且当前调整节点是左孩子。结果:随机产生1000个数据,输出红黑树的高度源码:原创 2014-01-12 17:03:04 · 740 阅读 · 0 评论 -
快速排序算法及其优化
思想:对于插入排序来说,当其输入几乎是排好序的时候,运行时间是很快的。而快速排序的效果很不错,因此可以结合起来使用。当在一个长度小于k的子数组上调用快速排序时,让它不做任何排序就返回。当顶层的快速排序调用返回后,对整个数组运行插入排序。完整源代码如下:#include #include#include#define MAXSIZE 100000void exchang原创 2014-01-12 16:56:00 · 964 阅读 · 0 评论 -
the beginning of the loop
发生的原创 2014-03-15 11:42:08 · 1095 阅读 · 0 评论