算法
文章平均质量分 56
踏雁寻花
分享带来乐趣
展开
-
寻找数组中的最大值和最小值
问题描述:给出一个数组,包含N个整数,那么需要比较多少次找到最大值和最小值注意:要想得到最大值和最小值,遍历一遍数组是不可避免的。我们能减少的就是减少比较次数来提高效率方法一、遍历一遍数组,同时得到最大值和最小值具体是,定义一个max 和 min,每遍历一个数,就分别和max 和 min比较一次,直到处理完所有的数据比较次数: N+N = 2N方法二、我们可转载 2013-04-17 20:50:18 · 2629 阅读 · 0 评论 -
用两个栈来实现一个队列以及用两个队列来实现一个栈
1、说明如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。answer:栈是先进后出,而队列是先进先出,一种自然的想法是,用一个栈来存储队列的元素,入队就和如栈一样; 出队的时候先将这个栈的元素依次压出另一个栈内,然后将栈顶元素(即队首)弹出,然后再依次倒回原先的栈内。 这样入队为O(1),出队为O(n)。仔细想想,并不需要每次都将当前所有元素在两个栈内倒来倒去, 只需要入队用一个转载 2013-05-21 18:15:19 · 2526 阅读 · 1 评论 -
红黑树插入操作分析及代码实现
首先说一下红黑树的五个性质:1、每个结点要么是红色的,要么是黑色的;2、根结点是黑色的;3、每个叶结点,即空结点(NIL)是黑色的;4、如果一个结点是红色的,那么它的两个子结点都是黑色的;5、对每个结点,从该结点到其子结点的所有路径上包含相同数目的黑结点。在对红黑树插入的时候,我们一般都会插入红色的结点,红黑树的插入主要有这几种情况:1、插入的是根结点;原创 2014-03-19 09:56:00 · 1714 阅读 · 0 评论 -
算法:海量日志数据,提取出某日访问百度次数最多的那个IP
首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。或者如下阐述(雪域原创 2014-03-05 10:00:58 · 12124 阅读 · 1 评论 -
冒泡排序与插入排序
其实从我学习c++以来,我一直搞不明这两个排序有什么区别!!不过呢,今天经过某位高师的知道,在下顿悟了!!现在就说说我的心得把,如果有错请见谅!!我们先看一段排序的例子把:这里有一个数组:12 45 342 2前面我弄的比较特别:是一个顺序的排列,而只有最后一个数不是有序的我们现在来排序,而这里只要排最后一个数对于插转载 2013-05-15 23:31:39 · 1010 阅读 · 1 评论 -
快速排序中的堆栈深度
7.1节中的QUICKSORT算法包含有两个对自身递归调用。在调用PARTITION后,左边的子数组和右边的子数组分别被递归排序。QUICKSORT中第二次递归调用并不是必须的;可以用迭代控制结构来代替它。这种技术称作尾递归,对多数的编译程序都加以了采用。考虑下面合格快速排序的版本,它模拟了尾递归:QUICKSORT'(A, p, r)1 while p转载 2013-05-19 16:36:54 · 4448 阅读 · 0 评论 -
n个结点的堆中结点i的子树大小至多为2n/3
证明:n个结点的堆中结点i的子树大小至多为2n/3堆中结点数目为n,因为左树数目肯定大于等于右子树数目,所以底层半满时左子树最大(含结点数目最多)假设高度为h的堆底层正好半满,此时左子树高度为0的结点数目为k个,则右子树中与左子树在同一层的结点数目也为k个(此时为空)(提醒:一个n个元素堆的高度为[lgn])当对是满二叉树时,结点数目为n+k个,高度1-h之间有2^(h)-原创 2013-05-17 16:12:16 · 1643 阅读 · 0 评论 -
逆序对
设A[1...n]是一个包含n个不同数的数组,如果在iA[j],则(i,j)就称为A中的一个逆序对(inversion)。 a)列出数组的5个逆序对 b)如果数组的元素取自集合{1,2,...,n}, 那么, 怎样的数组含有最多的逆序对?它包含多少个逆序对? c)插入排序的运行时间与输入数组中逆序对的数量之间有怎样的关系?说明你的理由。转载 2013-05-17 09:59:06 · 857 阅读 · 0 评论 -
合并排序中对小数组采用插入排序
在合并排序中对小数组采用插入排序。注:书里的那个O里还有一杠的符号打不出来,所以这里用大O代替了,特指同阶无穷大量。尽管合并排序最坏情况运行时间为O(nlgn),插入排序的最坏运行时间为O(n^2),但是插入排序的常数因子使得它在n较小时,运行要更快一些。因此,在合并排序算法中,当子问题足够小时,采用插入排序就比较合适了。考虑对合并排序做这样的修改,即采用插入排序策略,对n/k 个长度原创 2013-05-15 22:53:20 · 2316 阅读 · 0 评论 -
如何根据两个遍历建立二叉树
前序遍历:1 2 4 8 9 10 11 5 3 6 7 (规律:根在前;子树在根后且左子树比右子树靠前); 中序遍历:8 4 10 9 11 2 5 1 6 3 7 (规律:根在中;左子树在跟左边,右子树在根右边);后序遍历:8 10 11 9 4 5 2 6 7 3 1 (规律:根在后;子树在根前且左子树比右子树靠前); 其它例子: 前序遍历:ABDECFG 中序遍历:DB原创 2013-04-17 21:05:42 · 2188 阅读 · 0 评论 -
找出N个数组中第二大的数,需要比较多少次呢?
方法一、比较笨的方法先找到本数组中的最大数X,需要n-1次比较,再在剩下的数组中去找最大数X’,需要n-2次比较则X’就是第二大的数,这需要(n-1) + (n-2)次比较方法二、我们也可以在数组中,两数结合,分别求出最大值 和 次大值,之后每两个数结合求出的最值 在相互比较,得到最值得最大值 和 次大值具体思路:把数组中的每两个元素分为一组,每组中的最大数转载 2013-04-17 20:50:57 · 4881 阅读 · 0 评论 -
经典死锁案例-哲学家就餐
经典案例:哲学家就餐。通过修改《Java编程思想4》一书中的案例,来做实验,原创 2014-08-19 23:14:30 · 6133 阅读 · 0 评论