数据库查询 两趟扫描算法

为什么需要两趟算法

两阶段多路归并排序算法

基于排序的两趟扫描算法

基于散列的两趟扫描算法

在这里插入图片描述
如果需要保存的待处理数据块数远远大于内存可用块数的时候?应该怎么办?

例如:内存 只有8块,如何排序70块的数据集?如何针对70块的数据集进行去重复操作,进行分组操作?

基本思想

第一趟: 划分子集(数据集),并使自己具有某种特性,如有序或相同散列值等
在这里插入图片描述
第二趟:
处理全局性内容的操作,形成结果关系.如多子集间的归并排序,相同散列值子集的操作等
在这里插入图片描述

基于散列的两趟扫描算法

大数据集上的操作 可否 等于 (子集上操作)的并集?
例如:元组在某一自己上无重复即相当于在全集上无重复

基于排序的两趟扫描算法

多个已按横向处理的子集上,纵向归并结果等同于在全集上的 处理结果,多个已排序的子集,纵向归并处理的无重复即等同于全集上的无重复

两阶段多路归并排序TPMMS

![在这里插入图片描述](https://img-blog.csdnimg.cn/5c5c9981aa5f4752b343abeff6848431.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAb09DcnlPbw==,size_20,color_FFFFFF,t_70,g_se,x_16
在这里插入图片描述
基本排序策略:

  • Bproblem 块可划分N个子集合,使每个子集合的块数小于等于内存可用块数,即: B p r o b l e m / N < B m e m o r y B_{problem}/N<B_{memory} Bproblem/N<Bmemory.每个子集合都可以装入内存并采用内排序算法排好序并重新写回磁盘.
  • 问题转化为:N个已排序子集和的数据怎么
    在这里插入图片描述
    更大规模数据集的排序问题 多趟/多阶段
    内存大小 B memory = 3块 待排序数据 共占用 30块

在这里插入图片描述
在这里插入图片描述
A是正确的

在这里插入图片描述
正确选项是B,10000/100 是100 个子集,这100 个子集归并不下来,先做一个两路归并,再做一个99路归并

在这里插入图片描述
(1) 100/8 = 12块 读一遍,写一遍,子集合需要200块
(2) 七路归并, 排序需要(4+6*8)*2 = 104 次读写
(3) 七路归并,对于所有块进行排序 ,需要 200次读写
在这里插入图片描述

答案是B

在这里插入图片描述

在这里插入图片描述
答案是B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值