随笔分类 -  计算机算法

摘要:trie树--详解文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作。关键词:trie trie树 数据结构 前几天学习了并查集和trie树,这里总结一下trie。 本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。l Trie原理Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。l ... 阅读全文
posted @ 2011-10-05 15:55 樱色布 阅读(261) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/youwang/archive/2010/07/20/1781431.html 阅读全文
posted @ 2011-10-05 02:12 樱色布 阅读(174) 评论(0) 推荐(0)
摘要:#ifndef QUICK_SORT_H#define QUICK_SORT_H#include<assert.h>template<class T,int n>void swap(T* s,int i,int j){ assert((i<n)&&(j<n)); T temp=s[i]; s[i]=s[j]; s[j]=temp;}template<class T,int n>int partition(T* s,int start,int end){ int i= start; int devide_line=start; in 阅读全文
posted @ 2011-07-19 19:58 樱色布 阅读(214) 评论(0) 推荐(0)
摘要:#ifndef HEAP_SORT_H#define HEAP_SORT_H#include<assert.h>template<class T,int n>inline void swap(T* s,int i,int j){ assert((i<n)&&(j<n)); T temp=s[i]; s[i]=s[j]; s[j]=temp;}template<class T,int n>inline int leftChild(int i){ return 2*i+1;}template<class T,int n>i 阅读全文
posted @ 2011-07-19 19:57 樱色布 阅读(174) 评论(0) 推荐(0)
摘要:#ifndef MERGE_SORT_H#define MERGE_SORT_H#include<string>static int count =0;template<class T,int n>void merge(T* s,int i,int j,int m)//s : i.....,m,m+1,.....j{ T* ls = new T[m-i+2]; memcpy(ls,s+i,(m-i+1)*sizeof(T)); ls[m-i+1]=INT_MAX; T* rs = new T[j-m+1]; memcpy(rs,s+m+1,(j-m)*sizeof(T) 阅读全文
posted @ 2011-07-19 19:56 樱色布 阅读(157) 评论(0) 推荐(0)
摘要:#ifndef BUBBLE_SORT_H#define BUBBLE_SORT_H#include<assert.h>template<class T,int n>inline void swap(T* s,int i,int j){ assert((i<n)&&(j<n)); T temp=s[i]; s[i]=s[j]; s[j]=temp;}template<class T,int n>void bubble_up(T* s, int i){ for(int j=n-1;j-1>=i;j--) { if(s[j]&l 阅读全文
posted @ 2011-07-19 19:54 樱色布 阅读(136) 评论(0) 推荐(0)
摘要:一个袋子里有100个黑球和100个白球,每次从袋子里面取出两个球扔掉,规则如下:如果取出的两个球颜色相同则放入袋中一个黑球,不同则放入一个白球。例如:从袋子中取出一白一黑两个球,那么则将这两个球扔掉,然后重新放回袋子中一个白球。如果取出两个白球,则放回一个黑球。问题:最后剩余的一个球的颜色是黑色还是白色?出自《编程之美》思路:1.问题抽象:相同为黑,不同为白,您能想到某种计算机位操作吗?异或,好吧,我没有想到。设白球为1,黑球为0,那么取球的规则就被简化为对100个0和100个1做无序的异或操作。假如您只知道异或操作的性质想必您一定知道了答案。不知道也没有关系2.问题归纳简化1)假设袋子中只有 阅读全文
posted @ 2011-03-30 12:05 樱色布 阅读(1150) 评论(5) 推荐(0)
摘要:适合虚存环境的快速排序算法的性能研究(Performance of Quicksort adapted for virtual memory use)作者:A. I.Verkamo Univ. of Helsinki, Helsinki, Finland1.导论 在虚存环境中进行排序,内排序是一个可行的方法,即使是大型的排序问题。当进行排序时只有一部分数据村在主存中,这样,主存的大小就不受数据量大小的限制了。实验证明内排序在虚存中可以有效的对大型数据进行排序[1]。 快速排序被广泛的认为是一种有效的内排序算法。实验证明,快速排序在虚存环境中比其他的内排序更加快速[1,2,7]。并且它也被证 阅读全文
posted @ 2010-12-19 23:57 樱色布 阅读(428) 评论(0) 推荐(0)
摘要:一.问题:假设有一个含有n个不同元素的数组S,现在要求寻找出数组S中前K大的元素。利用堆排序算法解决这个问题,有两个思路:1.利用大根堆排序“每一趟都能产生1个最大值”的特性,来做K趟堆排序,则可找出这个前K大的元素2.首先取出数组S中的前K个元素,利用这K个元素,建立小根堆,然后利用小根堆产生的最小值与剩余的S-K个元素相比较,如果后者大,则交换他们的位置,否则不变,这样也能产生前K大的元素。二.分别实现这两种思路回忆一下堆排序:1.自底向上修复原始堆(建堆) 2.取堆中最大的叶子取带堆的根元素,并输出根元素 3.自顶向下的修复根堆其中最重要的子方法:以某个节点开始进行堆修复,以大根堆为例, 阅读全文
posted @ 2010-12-11 12:09 樱色布 阅读(1837) 评论(0) 推荐(0)
摘要:一、推导递归程序的递归方程的方法心得:即T(n)与T(n-1)的关系。看到第四章才知道这种方法叫做代换法(substitution method)只适用于T(n)=[exp1]*T(n-1)+[exp2]的这种形式1. exp1:主问题分解为几个子问题,即T(n-1)前的系数的确定,一般是个常数2. exp2:程序真正执行的部分写出递归方程之后就是求解的过程首先假设出T(n)的解,一般画出递归树会... 阅读全文
posted @ 2010-11-01 10:37 樱色布 阅读(153) 评论(0) 推荐(0)
摘要:目的:对计算机算法的知识体系有清楚的认识,能够做到遇到问题可以找到合适的解决办法。方法:全面撒网,重点捕鱼。全面了解算法的各个分支,重点突破重要的算法,分层次的看书。有的只需要知道大概的思路,而有的经典算法不仅需要思路可以做到很快的写出代码,体会思想并且熟记到信手拈来。实验室期间,工程上遇到具体问题,可以考虑算法的应用。总结:全面撒网,重点捕鱼,由简及易,分层击破。 阅读全文
posted @ 2010-10-06 10:09 樱色布 阅读(484) 评论(0) 推荐(0)
摘要:1.Bloom filter适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集基本原理及要点:对 于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这 个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是... 阅读全文
posted @ 2010-09-24 14:06 樱色布 阅读(495) 评论(0) 推荐(0)
摘要:一、预备知识:程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(stat... 阅读全文
posted @ 2010-08-28 19:37 樱色布 阅读(172) 评论(0) 推荐(0)
摘要:ospf(动态路由协议)协议很多人都知道,很多人也会配置而且很熟练,但是很少有人懂得其背后的思想是什么,Dijkstra算法是求解单源最短路径的绝妙算法之一,我打心眼里头喜欢这个算法,真想把之一去掉。Dijkstra算法是一种贪心算法,贪心算法的本质就是最值的和还是最值,也就是说人们相信我只要在点滴当中尽自己最大的努力,那么最后的结果就是最好的,可能你会说不一定,但是你敢说如果有一个环节你没有尽最... 阅读全文
posted @ 2010-07-04 11:15 樱色布 阅读(1434) 评论(0) 推荐(0)
摘要:#ifndef INSERT_SORT_H#define INSERT_SORT_H#include<assert.h>template<class T,int n>void swap(T* s,int i,int j){ assert((i<n)&&(j<n)); T temp=s[i]; s[i]=s[j]; s[j]=temp;}template<class T,int n>void insert_sort(T* s){ int i=1,j; for(i=1;i<n;i++) for(j=i;j>0;j--) { 阅读全文
posted @ 2010-04-12 20:49 樱色布 阅读(178) 评论(0) 推荐(0)
摘要:#ifndef SELECT_SORT_H#define SELECT_SORT_H#include<assert.h>template<class T,int n>void swap(T* s,int i,int j){ assert((i<n)&&(j<n)); T temp=s[i]; s[i]=s[j]; s[j]=temp;}template<class T,int n>T get_smalllest(T* s,int i){ assert(i<n); T result=i; for(;i+1<n;i++) 阅读全文
posted @ 2010-04-12 20:45 樱色布 阅读(321) 评论(2) 推荐(1)