![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
iteye_21054
这个作者很懒,什么都没留下…
展开
-
基本算法连载(3)-3个基本性质
性质1:一颗二叉树(严格的二叉树,即没有度为1的节点),有N个内部节点,那么它将有N+1个外部节点。 采用归纳法证明: 如果只有一个外部节点,即单独的一个根节点,那么内部节点数为0,结论显然成立。 假设有N-1个内部节点时,结论成立。那么二叉树拥有N个内部节点时,左子树有k个内部节点,右子树有N-k-1个内部节点,此外包括一个根节点。由于左 右子树的节点数都小于N,所以由前面假设可得左子树有k+1...2007-06-02 05:55:18 · 110 阅读 · 0 评论 -
基本算法连载(9)-模式匹配之KMP(Knuth-Pratt-Morris)
KMP算法,在《数据结构》课上听过,似是非懂,读完大学后全忘光了。Brute-Force算法,简单,谁都知道。从主串S的第pos个字符起与模式串进行比较,匹配不成功时,从主串S的第pos+1个字符重新与模式串进行比较。如果主串S的长度是n,模式串长度是m,那么Brute-Force的时间复杂度是o(m*n)。最坏情况出现在模式串的子串频繁出现在主串S中。虽然它的时间复杂度为o(m*n),但在一般情...2007-06-02 05:59:52 · 101 阅读 · 0 评论 -
基本算法连载(10)-模式匹配之BM(Boyer-Moore)
周末两天被BM算法折磨的要死。《a fast string search algorithm》论文中提到的算法思想倒是理解的差不多,但网上(http://www-igm.univ-mlv.fr/~lecroq/string/node14.html#SECTION00140)给出的实现可就是看不懂。通过Baidu,Google一搜,可以看到很多Boyer-Moore的实现。但绝大部分实现都是简化版本...2007-06-02 05:59:37 · 106 阅读 · 0 评论 -
基本算法连载(2)-摔xbox
题目 You have been given 2 special, extremely rugged Xboxes. You are in an office building that is 100 stories high. Using the fewest possible number of drops from windows in your office building, deter...2007-06-02 05:59:21 · 185 阅读 · 0 评论 -
找病狗
题目村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。 每个人可以观察其他的49条狗,以 判断它们是否生病(如果有病一定能看出来),只是自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要枪 毙自己的狗(发现后必须在一天内枪毙),而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。 第一天大家全看完了,但枪...2007-06-02 05:58:54 · 197 阅读 · 0 评论 -
基本算法连载(6)-Skip List(上)
Skip List号称性能与BST(Binary Sort Tree)树有得一拼,于是把它翻了个底朝天。代码是阐述其思想的最好方式,那我们还是看看它的具体实现(采用Java语言)public class SkipList { public static final int NOT_FOUND = -1; public static final int HEADER_KEY = -2; publi...2007-06-02 05:58:24 · 201 阅读 · 0 评论 -
基本算法连载(8)-Library Sort(gapped insertion sort)
特色:Library sort优于传统的插入排序(时间复杂度为O(n^2)),它的时间复杂度为O(nlogn),采用了空间换时间的策略。 思想:一个图书管理员需要按照字母顺序放置书本,当在书本之间留有一定空隙时,一本新书上架将无需移动随后的书本,可以直接插空隙。Library sort的思想就源于此。 实现:有n个元素待排序,这些元素被插入到拥有(1+e)n个元素的数组中。每次插入2^(i-1)个...2007-06-02 05:58:00 · 304 阅读 · 3 评论 -
基本算法连载(14)-BST(Binary Search Tree)的笔记
插入实现(传指针地址的地址): void InsertNode(struct node **node_ptr, struct node *newNode) { struct node *node = *node_ptr; if (node == NULL) *node_ptr = newNode; else if (newNode->value <= n...2007-06-02 05:57:13 · 98 阅读 · 0 评论 -
基本算法连载(13)-递归程序转变成非递归
用堆栈实现递归其实并没有消除递归,只不过人工做了本来由编译器做的事情。真正的非递归是指运算时所需要的空间是常数,即所需空间与问题的输入规模无关。并非所有递归都可以转换成非递归,比如著名的Ackmann函数。递归转非递归方法:(1)用一般公式直接代替。象经常看到的斐波那契数列,它就存在通项公式,而无需采用递归实现。(2)使用栈来实现(3)通过Cooper变换、反演变换将一些递归转化为尾递归,从而迭代...2007-06-02 05:56:53 · 146 阅读 · 0 评论 -
基本算法连载(12)-顺序查找的两个实现
顺序表的实现,天下人都知道,最最简单的一种,不过我还是贴出两个实现,大家看看:int search(int a[],int key,int length){int i;for(i=length-1;i>=0;i--){if(a[i]==key) return i;}return -1;}/** 实际数组元素是从1号位置起开始存储,0号位置存储key*/int search(int a[],i...2007-06-02 05:56:11 · 81 阅读 · 0 评论 -
基本算法连载(1)-顺序搜索与二分搜索
顺序搜索Programmer每天都碰到顺序搜索,其code snippet:/** 顺序遍历数组,搜索v值是否存在。如果存在,返回相应的位置索引,* 否则返回-1*/int sequentialSearch(int a[],int v,int l,int r){int i;for(i = l;i <= r;i++){if(v == a[i])return i;}return -1;}分析:假...2007-06-02 06:00:05 · 98 阅读 · 0 评论