30 20 20 30 20 50 30 52 30 20 50 52 20 50 60 52 30 52 30 68 20 60 68 50 50 20 60 70 删除50后
52 68 20 30 60 70 删除68后
52 20 30 60 70
22 67 41 30 53 46 13 01 0
ASL=(4*1+2*2+3+6)/8=17/8
1
2
3
4
5
6
7
8
9
10
int Search-Seq(SSTable ST, KeyType key) { ey=key;
for (i=1; [i].key>key; ++i); if [i].key==key)&&(i<= return i else return 0 ;
}ey=key;
for(i=1;[i].key>key;i++);
if (i>||[i].key int Search_Bin_Digui(SSTable ST,int key,int low,int high)ey==key) return mid; else if[mid].key>key) return Search_Bin_Digui(ST,key,low,mid-1); else return Search_Bin_Digui(ST,key,mid+1,high); } }ey) return ; low=1;high=; while(low<=high) { mid=(low+high)/2; if(key>=r[mid].key&&key } axkey) return ERROR; axkey&&key>[mid-1].maxkey) found=1; else if(key>[mid].maxkey) low=mid+1; else high=mid-1; } i=[mid].firstloc; typedef struct { LNode *h; 微积分可得,在等概率情况下,平均查找长度约为n/3. typedef struct { DLNode *pre; int data; DLNode *next; } DLNode; typedef struct { DLNode *sp; int length; } DSList; int last=0,flag=1; int Is_BSTree(Bitree T) { 果试图在删除x结点的同时修改线索,则问题反而复杂化了. void BSTree_Merge(BiTree &T,BiTree &S) { 合并过程中,并不释放或新建任何结点,而是采取修改指针的方式来完成合并.这样,就必须按照后序序列把一棵树中的元素逐个连接到另一棵树上,否则将会导致树的结构的混乱. void BSTree_Split(BiTree &T,BiTree &A,BiTree &B,int x) { 种情况,树中没有待插入关键字的同义词,此时只要新建一个叶子结点并连到分支结点上即可.另一种情况,有同义词,此时要把同义词的叶子结点与树断开,在断开的部位新建一个下一层的分支结点,再把同义词和新关键字的叶子结点连到新分支结点的下一层. Status TrieTree_Delete_Key(TrieTree &T,StringType key) { ey;j=(j+1)%hashsize[sizeindex]) ey)==i) printf(\ } if(m<1) return ERROR; T=malloc(m*sizeof(WORD)); 算法不考虑排序问题. } }ey&&!EQ[h].key,key)) h=(h+1) 000; if(EQ[h].key,key)) k=h; else k=NULL; }矩阵的元素是随机分布时,查找的时间复杂度为O(1). 第十章 外部排序 习 题 10.1 磁盘平衡归并和磁带平衡归并在时间上有否差别?如果有,差别在何处?如果没有, 请说明理由? 败者树中的败者指的是什么?若利用败者树求k个数中的最大值,在某次比较中得到a>b, 那么谁是败者?败者树与堆有何区别? 10.3 试问输入文件在哪种状态下,经由置换选择排序法得到的初始归并段长度最长?其最 长的长度是多少? 假如对一个经由置换选择排序法得到的输出文件再次进行置换选择排序,试问该文件将产生 什么变化? 设内存有大小为6个记录的区域可供内部排序之用,文件的关键字序列为: (51,49,39,46,38,29,14,61,15,30,1,48,52,3,63,27,4,13,89,24,46,58,33,76)。 试列出:用内部排序方法求出的初始归并段;用置换选择排序法得到的初始归并段。 假设某文件经内部排序得到100个初始归并段,试问: 若要使多路归并三趟完成排序,则应取归并的路数至少为多少? 假如操作系统要求一个程序同时可用的输入、输出文件的总数不超过13,则按多路归并至 少需几趟可完成排序?如果限定这个趟数,则可取的最低路数是多少? 假设一次I/O的物理块大小为150,每次可对750个记录进行内部排序,那么对含有150000 个记录的磁盘文件进行4路平衡归并排序时,需进行多少次I/O?
相关推荐: