上一页 1 2 3 4 5 6 ··· 12 下一页
摘要: 题目:对一个含有n个元素的集合来说,所谓k分位数(the kth quantile),就是能把已排序的集合分成k个大小相等的集合的k-1个顺序统计量。给出一个能列出某一集合的k分位数的O(nlgk)时间的算法思考:令每个子集合的元素个数为t = n / k,A[j]是数组A中下标为j的元素,A(j)是数组是第j大的元素则所求的k分位数是指A(t),A(2t),A(3t),……,A((k-1)t)按顺序依次求这k-1个数的运行时(k-1)*n要使运行时间为O(nlgk),改进方法是不要依次寻找这k-1个数,而是借用二分的方法来找。先找第k/2个分位数,再以这个分位数为主元把数组分为两段,分别对这 阅读全文
posted @ 2012-06-25 14:00 windmissing 阅读(1007) 评论(0) 推荐(0) 编辑
摘要: 题目:假定元素的值不同,说明如何才能使快速排序在最坏情况下以O(nlgn)时间运行思考:要改善最坏情况的下运行时间,就要从划分入手,保证即使是最坏情况,也要尽量均衡地划分。因此,使用SELECT找到中值,再以这个中值为主元进行划分代码:1.以RANDOMIZED-SELECT作为选择中值的算法 1 //9.3-3-使用RANDOMIZED-SELECT作为选择中值算法 2 #include <iostream> 3 using namespace std; 4 5 //已经出现很多次了,不解释 6 int Partition(int *A, int p, int r) 7 { 8 阅读全文
posted @ 2012-06-24 20:07 windmissing 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 题目:a)给定一个整数数组,其中不同的整数中包含的数字个数可能不同,但是该数组中,所有整数中总的数字数为n。说明如何在O(n)时间内对该数组进行排序b)给定一个字符串数组,其中不同的串包含的字符个数可能不同,但所有串中总的字符个数为n。说明如何在O(n)时间内对该数组进行排序(注意此处的顺序是指标准的字母顺序,例如,a < ab < b)思路:a)先用桶排序方法按数字位数排序O(n),再用基数排序的方法分别对每个桶中的元素排序O(n)b)递归使用计数排序,先依据第一个字母进行排序,首字相同的放在同一组,再对每一组分别使用计数排序的方法比较第二个字母见到有人用字典树,也是可以的代码: 阅读全文
posted @ 2012-06-23 15:14 windmissing 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 题目:如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序思路:把整数转换为n进制再排序代码:#include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A, int start, int end){ int i; for(i = start; i <= end; i++) { if(i == start)cout<<'{'; else cout<<' ' 阅读全文
posted @ 2012-06-23 11:27 windmissing 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题目:考虑这样一种排序问题,即无法准确的知道等排序的各个数字到底是多大.对于其中的每个数字,我们只知道它落在实轴上的某个区间内.亦即,给定的 n 个形如[ai, bi]的闭区间,其中ai,≤bi.算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排序<i1, i2, i3, i4,…in>,使得存在一个 cj∈[ai, bi],满足c1≤c2≤…≤cn.a)为n个区间的模糊排序设计一个算法,你的算法应该具有算法的一般结构,它可以快速排序左部端点(即各ai),也要能充分利用重叠区间来改善运行时间.(随着各区间重叠得越来越多,对各区间的排序的问题会变得越 阅读全文
posted @ 2012-06-21 09:19 windmissing 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 一、概念任何比较排序在最坏情况下都要用O(lgn)次比较不进行排序计算排序、基数排序、桶排序都是稳定排序二、代码#include <iostream>#include <cmath>using namespace std;int length_A, digit;void Print(int *A, int start, int end){ int i; for(i = start; i <= end; i++) { if(i == start)cout<<'{'; else cout<<' '; cout&l 阅读全文
posted @ 2012-06-20 10:24 windmissing 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 一、概念快速排序是基于分治模式的快排的运行时间与划分是否对称有关、最坏情况下,时间复杂度是O(n^2),最好情况下,时间是O(nlgn)二、程序#include <iostream> using namespace std; //输出过程 void Print(int *A, int len) { for(int i = 0; i < len; i++) { if(i)cout<<' '; else cout<<"==> A = {"; cout<<A[i]; } cout<<' 阅读全文
posted @ 2012-06-19 11:00 windmissing 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 一、概念堆是一种数组对象,却被视频一棵完全二叉树二、程序#include <iostream> #include <stdio.h> using namespace std; #define PARENT(i) (i)>>1 #define LEFT(i) (i)<<1 #define RIGHT(i) ((i)<<1)+1 int length = 10;//数组中元素的个数 int heap_size = 10;//属于堆的元素个数,看到HeapSort就会明白 /******************其它************* 阅读全文
posted @ 2012-06-17 15:42 windmissing 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 一、制作img镜像文件方法一:1.使用bochs自带的工具bximage.exe生成一个.img文件,生成的是一个全0的空文件,需要往里面写入内容2.创建自己的引导程序boot.asm,这段程序从网上找来的,不知道出处 org 07c00h ; 告诉编译器程序加载到 7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ; 调用显示字符串例程 jmp $ ; 无限循环 DispStr: mov ax, BootMessage mov bp, ax ; es:bp = 串地址 ... 阅读全文
posted @ 2012-06-16 15:11 windmissing 阅读(10171) 评论(0) 推荐(0) 编辑
摘要: 一、题目:请给出一个时间为O(nlgk)、用来将k个已排序链表合成一个排序链表算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并)二、步骤:step1:取每个链表的第一个元素,构造成一个含有k个元素的堆step2:把根结点的值记入排序结果中。step3:判断根结点所在的链表,若该链表为空,则go to step4,否则go to step5step4:删除根结点,调整堆,go to step2step5:把根结点替换为原根结点所在链表中的第一个元素,调整堆,go to step 2三、代码://heap.h #include <iostream> #inclu 阅读全文
posted @ 2012-06-16 10:39 windmissing 阅读(262) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 12 下一页