我正在为我正在从事的项目构建符号表。我想知道人们对于存储和创建符号表的各种方法的优缺点有何看法。
我已经做了相当多的搜索,最常用的建议是二叉树或链表或哈希表。以上所有优点和缺点是什么?(在C ++中工作)
您的用例大概将是“一次插入数据(例如,应用程序启动),然后执行大量读取,但很少执行插入操作”。
因此,您需要使用一种快速查找所需信息的算法。
因此,我认为HashTable是最适合使用的算法,因为它只是生成关键对象的哈希,然后使用该哈希访问目标数据- 它是O(1)。其他是O(N)(大小为N的链接列表-您必须一次遍历一个列表,平均重复N / 2次)和O(log N)(二叉树-您将搜索空间减半)每次迭代- 仅在树是平衡的情况下,因此这取决于您的实现,不平衡的树的性能可能会大大降低)。
只需确保HashTable中有足够的空间(存储桶)来存储您的数据(Re,Soraz在此岗位上的评论)。大多数框架实现(Java,.NET等)将具有您无需担心实现的质量。
您是否在大学学习过有关数据结构和算法的课程?