【问题标题】:Key Value Pair get and put with constant time complexity (key string with 5 length)具有恒定时间复杂度的键值对获取和放置(长度为 5 的键字符串)
【发布时间】:2016-10-23 23:18:32
【问题描述】:

被要求创建具有恒定时间复杂度的 Get 和 Put 键/值对。键是长度为5的字符串,值是对象。

也没有 Hash 功能(HashMap、HashSet、HashTable 或其他)它有冲突。

有什么建议吗?

【问题讨论】:

  • 为什么要标记 3 种不同的语言?

标签: data-structures hashmap


【解决方案1】:

如果您不使用散列函数,那么常数时间会更加困难。最简单的方法是,如果您可以将键限制为一组足够小的整数值,您可以简单地使用直接索引的大数组。否则一个具有足够大 N 的 N 叉树,与可能的键的数量相比,对数行为基本上是恒定的。 如果可能的键的实际数量相对较小,那么您可以使用树结构并将搜索该树的几个步骤(形式上是对数的)视为实际上是恒定的。


如果

key是长度为5的字符串

表示长度为 5 的字节串,那么密钥只有 40 位。但这大约是 1000 亿个值,这在 2016 年的 PC 上对于直接数组索引来说有点太多了。

限制它的一种方法是要求每个字节都是十进制数字的 ASCII 码。那么只有 100 000 个不同的键值,直接索引数组是可行的。

【讨论】:

  • 好点,但是看起来直接索引数组是要走的路。但是,数据集对于内存来说太大了。也许它可以保存到文件中。
猜你喜欢
  • 2014-12-20
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多