- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 数据库操作的实现算法
1、实验目的:掌握B树索引查找算法,多路归并排序算法,并用高级
语言实现
2 、实验内容:
选择熟悉的高级语言设计和实现程序完成下列功能:
1) 随机生成具有1,000,000条记录的文本文件,每条记录的长度为128
字节,其中固定包含一个整型属性A ,属性A 的值随机生成。其他
属性可以自己定义。
2 ) 针对属性A ,用高级语言实现两趟多路归并排序算法。要求在内存
分配8M空间用于外部归并排序
3 ) 以属性A为键值,实现B树索引。完成索引的插入,删除和查找。
3 、实验报告
截屏给出实验结果
给出算法流程图
由于共有1000000个元组,每个元组128B ,因此总大小为128M ,又内存
限制为8M ,则至少要分成128M/8M 16组。为了尽可能的减少I/O次数,
因此采用16路归并的方法;为了减少归并的时间,采用败者树,在
O(lgn) 的时间复杂度内选出最小的A属性元组,这种方法从划分到归
并,读入两次,写出两次,最少的I/O次数是4*1000000.
附上程序代码
1、生成1000000个128字节的元组代码:
#include iostream
#include fstream
#include ctime
#include cstdlib
using namespace std;
const int N 1000000;
string RandomChineseCharacters()
{
//srand( (unsigned)time(NULL));
int high 0xd7 - 0xc1;// 16-55区汉字
int low 0xfe - 0xa1;
int high_zn ;
int low_zn;
char name[3];
name[2] \0;
string s;
for(int i 0; i 60; i++)
{
high_zn rand()%high + 0xc1;
low_zn rand()%low + 0xa1;
name[0] high_zn;
name[1] low_zn;
s.append(name);
}
return s;
}
int main()
{
ofstream ofp (example2.txt);
if (!ofp.is_open())
{
coutcant open file!endl;
return 0;
}
srand( (unsigned)time(NULL));
int t 1 0,t2 0;//4+
string name;
for(int i 1;i N;i++)
{
t 1 rand();
t2 i;
name RandomChineseCharacters();
//coutname sizeof(t 1)sizeof(t2)name.length()endl;
ofpt 1 t2 nameendl;
}
return 0;
}
2 、16组快速排序和16路归并排序的代码
// Extenal_Merge_Sort.cpp : 定义控制台应用程序的入口点。
//
#include stdafx.h
#include iostream
#include fstream
#include ctime
#include cstdlib
#include string.h
#include assert.h
using namespace std;
typedef struct Data
{
int data;
文档评论(0)