【发布时间】:2016-10-23 23:18:32
【问题描述】:
被要求创建具有恒定时间复杂度的 Get 和 Put 键/值对。键是长度为5的字符串,值是对象。
也没有 Hash 功能(HashMap、HashSet、HashTable 或其他)它有冲突。
有什么建议吗?
【问题讨论】:
-
为什么要标记 3 种不同的语言?
被要求创建具有恒定时间复杂度的 Get 和 Put 键/值对。键是长度为5的字符串,值是对象。
也没有 Hash 功能(HashMap、HashSet、HashTable 或其他)它有冲突。
有什么建议吗?
【问题讨论】:
如果您不使用散列函数,那么常数时间会更加困难。最简单的方法是,如果您可以将键限制为一组足够小的整数值,您可以简单地使用直接索引的大数组。否则一个具有足够大 N 的 N 叉树,与可能的键的数量相比,对数行为基本上是恒定的。 如果可能的键的实际数量相对较小,那么您可以使用树结构并将搜索该树的几个步骤(形式上是对数的)视为实际上是恒定的。
如果
” key是长度为5的字符串
表示长度为 5 的字节串,那么密钥只有 40 位。但这大约是 1000 亿个值,这在 2016 年的 PC 上对于直接数组索引来说有点太多了。
限制它的一种方法是要求每个字节都是十进制数字的 ASCII 码。那么只有 100 000 个不同的键值,直接索引数组是可行的。
【讨论】: