我有一个包含连接字符串的文件。
find_or_add(string)
任何一个:
- 返回文件中字符串出现的偏移量(不一定是第一个)
- 将尽可能多的字符串尾部添加到文件中,以使文件包含字符串(然后返回文件中字符串的偏移量)。
伪代码:
file.init() // file == ""
file.find_or_add("cat") // file == "cat", returns 0
file.find_or_add("able") // file == "catable", returns 3
file.find_or_add("table") // file == "catable", returns 2
file.find_or_add("tables") // file == "catables", returns 2
file.find_or_add("spigot") // file == "catablespigot", returns 7
file.find_or_add("pig") // file == "catablespigot", returns 8
我应该查看什么算法/结构来“总结”内存中的这个文件,并允许最多 O(log N) 进行所需的操作?
假设文件大于 RAM。
语言并不重要,但我可以阅读 Pseudocode、C、Java、Python、Javascript 和 Haskell。