【问题标题】:Faster time complexity data structure [closed]更快的时间复杂度数据结构
【发布时间】:2014-03-23 21:12:35
【问题描述】:

什么是时间复杂度更快的数据结构?为什么? 我需要制作适用于大量数据的应用程序。 我的应用程序是一个酒店预订,它将列出每个国家/地区的大型酒店列表(约 20000 家)。 那么我应该使用这个列表(排序,搜索,遍历......) 列表项包含酒店名称、星级、排名、最后预订、照片和价格 一些研究表明,哈希表是更快的结构,所有操作(添加、删除和查找)都需要 O(1)。 为什么我找不到有关 JSON 的信息?我可以将 JSON 对象分类为 listArray、hashMap 还是什么? 什么会更快?将我的数据(服务器端)保存在 sql 数据库中? XML ?还是 JSON?

【问题讨论】:

  • 我能想到的每一个众所周知的数据结构在某些特定操作上都会胜过许多其他数据结构,使其成为某些应用程序的不错选择。没有silver bullet。您需要具体告诉我们您希望有效支持哪些操作,您的性能要求是什么,并更多地说明您的数据,除了“大量”数据(更具体地告诉我们有多少以及它是什么)看起来像)。
  • 我用更多细节编辑了我的问题:)
  • 你会插入和删除很多次吗?您将更经常执行的操作是什么?
  • 获得酒店列表后,我应该按价格排序然后显示。所以最多的操作就是遍历和排序。
  • 要对哪些参数进行排序/搜索?你想按什么顺序遍历?如果它变化很大,答案可能只是“使用数据库”,因为数据结构选项是一组有点复杂的地图,基本上模拟数据库(抽象地,这可能更容易,或者对于所有可能的组合您要查询的字段),这真的不应该这样做,除非它只是为了学习。您能否准确地说出您想要(有效地)支持哪些操作(那里有一个“...”),因为这对于选择结构很重要,以及效率如何。

标签: performance data-structures time-complexity


【解决方案1】:

没有“更快”的数据结构,否则我们都会使用它而忘记其他一切。不同的数据结构存在于不同的目的;选择一个通常是考虑最常见的操作。例如,数组适合随机访问,但如果您打算在元素之间插入或删除大量数据,则可能是一个糟糕的选择。另一方面,列表提供了有效的插入和删除时间,但缺乏有效的随机访问——这都是关于权衡的。

查看您的帖子和您的要求(并在阅读了一些 cmets 之后),我最初会尝试使用自平衡二叉搜索树,例如 AVL TreeRed-black tree。这些似乎是一个不错的选择,因为您可以轻松地进行按顺序遍历,并且获得O(log(n)) 插入、删除和检索时间。

另一种选择是将酒店存储在trie 中,这是一种通常用于实现字典并将酒店名称与您想要的任何数据相关联的数据结构。

如果您想对数据进行排序,我个人不会使用哈希表。

【讨论】:

  • 为什么要使用 trie ?我的结果没有链接,所以我没有节点,我只有键和值,结果是从 XML 文件中检索的。字典呢?
  • @bouraxwebmaster 尝试不适用于“链接”数据。尝试用于存储密钥并(可能)将它们与某些数据相关联。将其视为字典实现。您可以将节点视为酒店名称字母中的跳跃。
  • 我之前没有尝试过,但还是感谢您的建议。至少会尝试检查新的东西:)
  • @bouraxwebmaster 继续。维基百科的文章很全,我觉得是个不错的开始
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2018-06-13
相关资源
最近更新 更多