算法
文章平均质量分 71
a81895898
这个作者很懒,什么都没留下…
展开
-
算法导论习题2.3-7
给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数组成的集合S和另个整数x时,判断S中是否存在有两个其和等于x的元素://在已排序的数组上进行二分查找bool binary_search(int a[],int x,int p,int r){ if(p>=r&&a[p]!=x) return false; int j=(p+r)/2;原创 2011-11-22 22:35:33 · 985 阅读 · 0 评论 -
编程之美1.3 一摞烙饼的排序
《编程之美》读书笔记:1.3 一摞烙饼的排序问题: 星期五的晚上,一帮同事在希格玛大厦附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:“我以前在餐馆打工,顾客经常点非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,把它转载 2012-04-12 23:32:02 · 889 阅读 · 0 评论 -
《编程之美》中“小飞的电梯调度算法”停k层的解法
Cpp代码 #include #include #include using namespace std; const int totalFloorNum = 10; const int totalStopNum = 4; int nPerson[totalFloorNum + 1]; int minFloors[totalF转载 2012-04-20 12:06:46 · 2094 阅读 · 1 评论 -
设计模式
设计原则:1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;2.针对接口编程,而不是针对实现编程;3.多用组合,少用继承;4.为了交互对象之间的松耦合设计而努力;5.类应该对扩展开放,对修改关闭;6.要依赖抽象,不要依赖具体类;策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。原创 2012-07-15 01:22:25 · 448 阅读 · 0 评论 -
蓄水池问题
【问题】随机抽样问题表示如下:要求从N个元素中随机的抽取k个元素,其中N无法确定。这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。所以搜索网站有时候会问这样的问题。这里的核心问题就是“随机”,怎么才能是随机的抽取元素呢?我们设想,买彩票的时候,由于所转载 2012-10-04 16:34:55 · 1360 阅读 · 0 评论 -
面试题整理(三)
第6题------------------------------------给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下: 【0,1,2,3,4,5,6,7,8,9】举一个例子, 数值: 0,1,2,3,4,5,6,7,8,9 分配: 6,2,原创 2012-09-17 22:51:06 · 461 阅读 · 0 评论 -
面试题整理(四)
/*第11题------------------------------------求二叉树中节点的最大距离... 如果我们把二叉树看成一个图, 父子节点之间的连线看成是双向的, 我们姑且定义"距离"为两节点之间边的个数。 写一个程序, 求一棵二叉树中相距最远的两个节点之间的距离。*///July 2010/10/19//此题思路,tree_star and原创 2012-09-18 00:34:08 · 742 阅读 · 0 评论 -
面试题整理(六)
/*第22题:有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A说不知道,B说不知道,C说不知道,然后A说知道了。请教如何推理,A是怎么知道的。如果用程序,又怎么实现呢?*/推理如下:因为第一次三者都说不知道,则两两相加不可原创 2012-09-18 22:47:08 · 2417 阅读 · 0 评论 -
面试题整理(五)
/*16题:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11输出8 6 10 5 7 9 11。*///题目不是我们所熟悉的,树的前序,中序,后序。即是树的层次遍历。/*308 楼 panda_lin 的回复,原创 2012-09-18 00:34:56 · 797 阅读 · 0 评论 -
求字符串中不重复的子串数
Given a string, we need to find the total number of its distinct substrings.InputT- number of test cases. TEach test case consists of one string, whose length is OutputFor each test原创 2012-04-08 15:55:03 · 1771 阅读 · 0 评论 -
二叉查找树
二叉查找树:struct binary_search_node//二叉查找树结点结构{ int key; binary_search_node *left; binary_search_node *right; binary_search_node *p; binary_search_node(int k=0,binary_search_node原创 2012-01-11 20:53:00 · 424 阅读 · 0 评论 -
算法导论思考题2-4
用O(nlgn)的最坏运行时间,确定n个元素的数组中逆序对的数目(修改合并排序):int merge_inversion(int a[],int p,int q,int r){ int n1=q-p+1; int n2=r-q; int *L=new int[n1]; int *R=new int[n2]; int i,j,k,v; for(i原创 2011-11-23 17:43:00 · 902 阅读 · 0 评论 -
算法导论4-6 VLSI芯片测试
Diogenes 教授有n个被认为是完全相同的VLSI芯片,原则上它们是可以互相测试的.教授的测试装置一次可测试二片,当该装置中放有两片芯片时,每一片就对另一片作 测试并报告其好坏.一个好的芯片总能够正确的报告另一片的好坏,但一个坏的芯片的结果就是不可靠的.这样,每次的测试的四种可能结果如下: a)证明若少于 n/2 的芯片是坏的,在这种成对测试方式下,使用任何策略都不能原创 2011-11-29 22:31:22 · 1676 阅读 · 0 评论 -
算法导论5.4-2
假设将球投入到b个盒子里。每一次投掷都是独立的,并且每个球落入任何盒子的机会都相等。在至少有一个盒子包含两个球之前,期望的投球次数是多少? 设P(n)表示第n次投球,使某个盒子中的球到达两个,则:P(1)=0(一次投球显然不可能使某个盒子的球的数量达到2)P(2)=(1-0)*1/b=1/b(两次投球使某个盒子数量到2,则必然是第二次投出的球被投入第一次投出的球所在原创 2011-12-01 22:31:08 · 2385 阅读 · 0 评论 -
链表在存储器中紧凑的排列
10.3-4 我们常常希望一个双链表中的所有元素在存储器中能够紧凑地排列在一起,例如使用多重数组表示中的前m个下标位置(在一个分页的虚拟计算机环境中情况就是这样)。假设链表以外没有指向链表元素的指针,请说明应如何实现过程ALLOCATE-OBJECT和FREE-OBJECT,才能使这种表示比较紧凑。(提示:使用栈的数组实现。) 分析与解答: 假设链表中已有y转载 2011-12-19 17:13:10 · 855 阅读 · 0 评论 -
中位数和顺序统计学
在一个数组中同时找最大和最小值:时间复杂度O(1.5n)void find_min_max(int a[],int n,int b[]){ int max,min; if(n%2==1)//n是奇数的情况 { max=min=0; for(int i=1;i!=n;i+=2)//成对比较 {原创 2011-12-16 11:35:08 · 818 阅读 · 0 评论 -
数据结构的扩张
顺序统计树:enum nodecolor {red,black};struct os_node{ int key; os_node *left; os_node *right; os_node *p; nodecolor color; int size; os_node(int a,nodecolor c=red,int s=1)原创 2012-02-21 17:14:01 · 458 阅读 · 0 评论 -
红黑树
红黑树:enum nodecolor {red,black};struct red_black_node{ int key; red_black_node *left; red_black_node *right; red_black_node *p; nodecolor color; red_black_node(int a,nodec原创 2012-02-21 17:11:35 · 1265 阅读 · 0 评论 -
动态规划
1.装配线调度共有两条装配线,每条有N个装配站,装配线i的第j个装配站装配时间为a[i,j],一个汽车进入装配线i,花费时间e[i],如果在装配站[i,j]之后转移到另外一条线则花费t[i,j].在离开一条线的第N个装配站后,完成的汽车花费时间x[i]离开工厂,待求解的问题是在装配线1选择哪些站,在装配线2选择哪些站使通过总时间最小,时间复杂度O(n)。#define N 6in原创 2012-03-04 21:18:34 · 452 阅读 · 0 评论 -
图的相关算法
图的广度优先搜索和深度优先搜索:#include #include #include #include #include #include using namespace std;#define VERTEXNUM 100//最大顶点数#define INF 65535enum nodecolor {white,gray,black};typedef struct原创 2012-03-21 22:06:04 · 712 阅读 · 1 评论 -
排序
插入排序:时间复杂度最坏O(n^2),最佳O(n),平均O(n^2) ,空间复杂度O(1),稳定void insertion_sort(int a[],int n){ for(int i=1;i<n;++i) { int temp=a[i]; int j=i-1; while(j>=0 && a[j]>temp)原创 2011-11-20 22:03:20 · 467 阅读 · 0 评论