有时面试问题会涉及到简单的External Memory Algorithms,以这些为引子,简单记录一下自己感兴趣的相关内容。经验有限,错误及局限之处,见谅。
(待)参考内容
- Questions
- WIKI
- the external memory model (the cache-aware model)
- (memory size M, block size B, O(IO))
- External sorting
- B-tree
- O ( log B N ) O(\log _{B}N) O(logBN), asymptotically optimal
- the external memory model (the cache-aware model)
- 高级数据库系统
- External memory algorithms and data structures: dealing with massive data
相关问题
数据均位于存储中
Search
在N个object中寻找指定的element。使用B-Tree
External sorting
- distribution sort, which is similar to quicksort
- M B \tfrac {M}{B} BM-way merge sort
- asymptotically optimal runtime of O ( N B log M B N B ) O({\tfrac {N}{B}}\log _{\tfrac {M}{B}}{\tfrac {N}{B}}) O(BNlogBMBN) to sort N object
The permutation problem
to rearrange N N N elements into a specific permutation。使用sort,或“inserting each element in order and ignoring the benefit of locality”??
external k-way merge
来自于「k-way merge sort」的基本想法是将内存划分为 k + 1 k+1 k+1份,读取所有 k k k个文件的头部数据,预留一个作为输出缓存。在此基础上执行k-way merge,但附加条件是:每当 k + 1 k+1 k+1中某一部分使用完毕(输出满或输入空),flash并重新载入。
PS:「key-way merge」一个很有意思的方法叫做「Tournament Tree」,使用k个list构建一个「elimination tournament diagram」,使用k个list的头部作为“选手”,输出“胜出”结果,保留“决胜”过程,重复过程。因为可以重复利用“决胜”过程,以及自然构成的平衡树,可以替代堆作为key-merge的方法。(比起堆优化了delete和insert操作)
maximum repetition
给定N个字符串,给出最大重复的串。