随笔分类 -  算法导论学习

最小值和第二小值
摘要:这个问题来自算法导论的习题9.1-1.问题是这样的:证明:在最坏情况下,利用n+[lgn]-2次比较,即可找到n个元素中的第二小元素。证明:构造出这种比较方法就可以了。看见lgn就应该想到配对。实际上,将n个元素两两分组进行比较,选取每次比较中的较小元素,这样一来,可以一直做下去直到得到最小元素,这需要n-1次比较。将想原来做到的淘汰赛问题,一场比赛淘汰一支球队,一共就需要n-1场比赛决出冠军。接下来,次小的元素肯定是和最小元素比较过的,回溯与最小元素比较过的元素,最坏情况下需要二叉树的高度这么多次,所以还需要[lgn]-1次比较。所以总共需要n+[lgn]-2次比较。 阅读全文
posted @ 2011-09-27 02:24 bovine 阅读(753) 评论(0) 推荐(1)
zz排序算法的稳定性
摘要:选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法:这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度log2(n)*n,所有内部排序方法中最高好的,大多数情况下总是最好的。归并排序:log2(n)*n堆排序:log2(n)*n希尔排序:算法的复杂度为n的1.2次幂这里我没有给出行为的分析,因为这个很简单,我们直接来分析算法:首先我们考虑最理想的情况1.数组 阅读全文
posted @ 2011-09-27 01:04 bovine 阅读(592) 评论(0) 推荐(0)
young矩阵学习
摘要:在台上唱歌,最牛逼的不是唱完后观众热烈的掌声,而是开始歌唱时整个喧嚣的人群瞬间安静下来,静静地聆听。----anonymous问题Young氏矩阵是满足这样性质的m*n矩阵,它其中每一行的数据都从左到右排序,每一列的数据都从上到下排序。Young氏矩阵会有一些∞数据项,表示不存在的元素。所以,Young氏矩阵可以用来存放人r<=mn个有限的数。下图就是一个Young氏矩阵的例子。给出在一个非空m*n的Young氏矩阵上实现EXTRACT-MIN的算法,使其运行时间为O(m+n)。定义T(p)为EXTRACT-MIN在任何m*n Young氏矩阵上的最大运行时间,其中p=m+n。给出表达T 阅读全文
posted @ 2011-09-26 16:37 bovine 阅读(782) 评论(0) 推荐(1)
堆排序
摘要:可以说堆排序兼具了插入排序和归并排序的优点。想插入排序一样,它sorts in place;同时时间复杂度达到归并排序的级别O(nlgn)。以大根堆为例,大根堆中,除了根以外的每个结点i,都有: A[parent(i)]>=A[i]。大根堆的基本过程包括:max_heapify(a,i).对结点i及其子孙结点保持大根堆的性质;build_max_heap.对给定的数组建堆。思路是从最后一个非叶子结点开始max_heapify;heapsort.进行大根堆排序.从最后一个元素开始,交换根结点和其位置,然后max_heapify后重复此过程。//realization of heatsort 阅读全文
posted @ 2011-09-22 21:07 bovine 阅读(274) 评论(0) 推荐(0)
归并排序与逆序对
摘要:算法导论上2-4是这样一个题目:设A[1...n]是一个包含n个不同数的数组。如果在i<j的情况下,有A[i]>A[j],则(i, j)就称为A中的一个逆序对(inversion)。试给出一个算法,它能用O(nlgn)的最坏情况运行时间确定n个元素的任何排列中逆序对的数目。咋一看没有什么思路,可一看见提示赫然给出:修改归并排序,于是顿悟。其实,只需要在归并排序中加上一个计数器,在每次merge的时候计算逆序对,这样就可以算出总共的逆序对了。#include <iostream>using namespace std;void merge_sort(int *A,int 阅读全文
posted @ 2011-09-22 13:28 bovine 阅读(1805) 评论(0) 推荐(0)
All roads lead to Rome, some smooth, some rough.
摘要:算法导论习题5.2.4介绍了一个帽子保管问题(hat-check problem):有n位顾客,他们每个人给餐厅负责保管帽子的服务生一顶帽子。服务生以随机的顺序将帽子归还给顾客。请问拿到自己帽子的顾客的期望数目是多少?解法一:利用算法导论一书中介绍的indicator random variables,假设随机变量Xi满足(1<=i<=n):那么总的随机变量x满足:对于每一个顾客,他拿到自己帽子的概率是1/n,所以:所以,这个思路根据算法导论书上的讲解比较容易想到,但是真正想的时候我不免回到了忘日学习概率论的惯性思维中,于是有了解法二,比解法一复杂不少。解法二:基本思想是利用 期望 阅读全文
posted @ 2011-09-21 20:40 bovine 阅读(606) 评论(0) 推荐(0)