这是一个面试问题:"您将使用哪种数据结构来检查数据库中是否存在记录?"
我的直接答案是二进制搜索树。
面试官没有发表评论,接着回答下一个问题。这个问题的答案是什么?
答案 0 :(得分:1)
这个问题有很多答案,而这一切都取决于这条记录究竟包含什么以及你想用它做些什么。
我会回答 hash table ,因为摊销案件的搜索时间非常快(O(1))。它还具有快速插入和删除的附加好处。
如果你计划对整个记录进行操作(即第n个最小的工资),二分搜索树效果很好,但是如果你所做的只是搜索数据库存在那么你会看到更长的时间搜索的运行时间。
答案 1 :(得分:1)
有许多可以接受的答案,在这样的采访中,提供快速而自信的答案比给出完美答案更重要。
Binary trees绝对是一个虚荣的人。恭喜你!
但是对于数据库, B-trees (" B"代表"平衡")会更加推荐。 B树是二叉树的概括,其中每个节点具有两个以上的子节点。这使得此数据结构更有效地优化磁盘读取访问。该结构还需要比二叉树更少的重新平衡,这意味着再次减少磁盘写入访问。
如果您对性能考虑感兴趣,this SO answer会对两种结构进行有趣的比较。
现在,仅仅是为了记录,在一些应用领域中有更多专门的结构,例如用于3D空间数据的R-trees,或者如果您考虑寻找唯一键并准备牺牲一些空间的哈希表速度更快。
编辑:热门数据库的一些示例(并非详尽无遗!):