线性时间排序习题
2013-07-22 11:21
134 查看
1.设计一个算法,对N个介于0~k之间的数进行预处理,然后能够在O(1)的时间给出有多少个元素介于[a,b]之间
首先肯定要考虑a,b和K的相对大小,这里就假设0<a<b<k,其他情况类似
1.参照级数排序累计统计
2.对累计统计的结果中计算c-c[a-1]
[b]2.插入排序,归并排序,堆排序和快速排序那些是稳定的,有没有一种方法保证任何排序都是稳定的
首先插入排序和归并排序时稳定的,另外两个是不稳定的
对于快速排序,解决办法是申请一块与待分割元素相同大小的空间,在每一次Pation过程中,扫描两次
第一次扫描比主元小的元素,第二次扫描比主元大地元素,耗时O(2n),这样就保证了稳定性
对于堆排序,为每个元素申请一个额外的空间记录他们的初始位置,比较的时候先比较元素的大小,相同然后比较位置的大小,需要申请O(n)的空间
3.一个包含N条记录的数组,每条记录为0或1,对其进行排序
1.算法时间代价O(n)
2.算法是稳定的
3.为原址排序,空间复杂度为O(1)
问:
a.分别给出满足条件(1,2),(1,3),(2,3)的算法
b.以上的三个算法中有无用于计数排序中的列排序方法,使得在b为关键字的n条记录排序时间为O(bn)
c.假设有N条记录他们的范围为0~k,修改计数排序,使得在用时O(n+k),空间O(k)的情况下原址排序
a.满足(1,2)------归并排序 满足(1,3)----------快速排序中的一次划分 满足(2,3)--------插入排序
b.计数排序要求稳定,并且时间为O(N),归并排序满足条件
c.数组C[]为计数排序中累计统计后的位置
4.水壶问题
有n个蓝水壶和相同数量的红水壶,每个蓝水壶容量都不同,且有一个红水壶水壶与之对应
问怎么在O(n^2)时间配对,O(nlogn)呢?证明比较次数下界O(nlogn)
在O(n^2)时间配对------选择排序思想,每次选一个蓝水壶,挨个比较
O(nlogn)---快速排序思想首先选一个蓝水壶,对其划分,会得到三种水壶
容量比它大,小或者相等,然后取与它相同的红水壶对蓝水壶进行划分
证明下界同决策树
首先肯定要考虑a,b和K的相对大小,这里就假设0<a<b<k,其他情况类似
1.参照级数排序累计统计
2.对累计统计的结果中计算c-c[a-1]
[b]2.插入排序,归并排序,堆排序和快速排序那些是稳定的,有没有一种方法保证任何排序都是稳定的
首先插入排序和归并排序时稳定的,另外两个是不稳定的
对于快速排序,解决办法是申请一块与待分割元素相同大小的空间,在每一次Pation过程中,扫描两次
第一次扫描比主元小的元素,第二次扫描比主元大地元素,耗时O(2n),这样就保证了稳定性
对于堆排序,为每个元素申请一个额外的空间记录他们的初始位置,比较的时候先比较元素的大小,相同然后比较位置的大小,需要申请O(n)的空间
3.一个包含N条记录的数组,每条记录为0或1,对其进行排序
1.算法时间代价O(n)
2.算法是稳定的
3.为原址排序,空间复杂度为O(1)
问:
a.分别给出满足条件(1,2),(1,3),(2,3)的算法
b.以上的三个算法中有无用于计数排序中的列排序方法,使得在b为关键字的n条记录排序时间为O(bn)
c.假设有N条记录他们的范围为0~k,修改计数排序,使得在用时O(n+k),空间O(k)的情况下原址排序
a.满足(1,2)------归并排序 满足(1,3)----------快速排序中的一次划分 满足(2,3)--------插入排序
b.计数排序要求稳定,并且时间为O(N),归并排序满足条件
c.数组C[]为计数排序中累计统计后的位置
for i =length to 1 { temp1=A[i]; if(c[temp1]==i) continue; else while(c[temp1]!=i) { temp2=A[c[temp1]]; A[c[temp1]]=temp1; c[temp1]--; temp1=temp2; { }
4.水壶问题
有n个蓝水壶和相同数量的红水壶,每个蓝水壶容量都不同,且有一个红水壶水壶与之对应
问怎么在O(n^2)时间配对,O(nlogn)呢?证明比较次数下界O(nlogn)
在O(n^2)时间配对------选择排序思想,每次选一个蓝水壶,挨个比较
O(nlogn)---快速排序思想首先选一个蓝水壶,对其划分,会得到三种水壶
容量比它大,小或者相等,然后取与它相同的红水壶对蓝水壶进行划分
证明下界同决策树
相关文章推荐
- 动易2006序列号破解算法公布
- C#数据结构与算法揭秘二
- JavaScript 组件之旅(二)编码实现和算法
- 将15位身份证补全为18位身份证的算法示例详解
- C++算法系列之日历生成的算法代码
- 1 2 3 4 5 6 7 8 9 = 110的java实现
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 【代码】Pythonの代码片段
- STL中算法
- 数据结构&算法学习
- 算法的时间复杂度
- 算法导论:选择排序的原理与实现
- PHP实现四种常用的排序算法
- 图解插入排序算法
- 一些常见算法的JavaScript实现
- 平方根sqrt()函数的底层算法效率
- 二叉搜索树的一些相关算法介绍
- 欧几里德算法(辗转相处法)练手
- 面试中常见的一些算法问题
- 计算机编程中一些重要的算法