TOP-K+文件
TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。
建堆N个的大堆,pop前K个。假设有十亿整型数据(1G约等于10亿Byte)
先建立一个K个数的小堆。再遍历其余数据,若遍历到的数据比堆顶数据大,就代替他进堆到堆顶。再向下调整,大的数就沉到了堆底。
创建数据文件
文件的使用
打开文件:要打开文件,你可以使用
fopen
函数。它接受两个参数:**文件名和打开模式。**打开模式可以是读取(”r”)、写入(”w”)、追加(”a”)等。例如:
1 FILE* file = fopen("example.txt", "r"); // 以只读模式打开文件这将打开名为
"example.txt"
的文件以供读取。读取文件:使用
fread
、fscanf
或fgets
等函数来从文件中读取数据。例如,使用fscanf
读取整数:
1 fscanf(file, "%d", &num);这将从文件中读取一个整数并将其存储在变量
num
中。写入文件:使用
fwrite
、fprintf
或fputs
等函数将数据写入文件。例如,使用fprintf
写入字符串:
1 fprintf(file, "Hello, World!\n");这将字符串 “Hello, World!” 写入文件。
关闭文件:完成文件操作后,使用
fclose
函数关闭文件,以释放相关资源:
1 fclose(file);关闭文件后,不再能够对其进行读取或写入操作。
1 | /*创建文件*/ |
生成随机数
利用种子生成伪随机数
1 | /*生成并写入随机数*/ |
向下调正建立小堆
理解向下调整的原理:传入下标最大的父辈(倒数第二行的数据),通过与其子代比较,交换数据。
1 | /*--向下调整-建立小堆--*/ |
完整源码
1 |
|