最近,我遇到了一个面试问题,
一个日志文件包含1亿条记录,如何设计有效的搜索文本算法来降低内存使用量和时间成本。
每个记录格式为:时间戳(8位)\ tid_number(15位)\ trecording_content
给出关键字(exp:id_number或时间戳记),您必须返回完整的行记录信息。每个id_number的前缀8位数字相同,每个时间戳的前缀6位数字相同。
我想使用与二叉树相关的树算法。后来,我搜索了一些答案,有人建议使用反向索引搜索。但是我不知道要牺牲内存和时间成本,有什么想法吗?
答案 0 :(得分:2)
如果有人问我这个问题,我将首先提出问题以查找有关问题域的更多信息。一些开始的问题:
听起来索引在这种情况下(日志文件)似乎没有用,所以我不会讨论与索引有关的问题。
对于日志文件,时间戳似乎是正确的。这样一来,您就可以使用二进制搜索,而二进制搜索可能会因长度可变的记录而变得复杂。
如果按固定的时间间隔添加记录,以使时间戳记是文件中偏移的近似线性函数,则可以通过基于线性插值进行估计来改善二进制搜索-google 插值搜索。