如何解决用键从一小组物品中查找物品的最快方法是什么?
说我有一个class
和一个fields
数组。每个字段都有一个name
。基本上就像SQL表一样。
class X {
foo: String
bar: String
...
}
构造数据结构和算法以按键获取字段的方法是什么,以使其在操作数量方面(a)快速,在内存/数据结构方面(b)最小大小?
很显然,如果您知道该字段的索引,最快的就是通过数组中的 index 查找该字段。但是我需要通过 key 找到它们。
现在,每个班级的按键数量都相对较少。在此示例中,只有2个键/字段。
一种方法是创建一个哈希表,例如JS中的this。您给它一个密钥,并遍历密钥中的每个字符并通过一些混合函数运行它。但是,这首先取决于密钥的大小。对于我期望的字段名称类型来说,还算不错,应该不要太大,假设它们通常不超过100个字符。
另一种方法是创建特里。首先,您必须计算特里树,然后在进行查找时,特里树的每个节点都将有一个字符,因此查找字段的步数为name.length
。
但是我想知道,由于字段的数量会很小,所以我们为什么需要遍历字符串中的键?只要字段的数量很少,一种可能更简单的方法是只遍历这些字段,并对每个字段名称进行直接的字符串匹配。
但是就迭代次数而言,这三种技术都大致相同。
是否还有其他类型的魔术可以使您的迭代次数/步数最少?
似乎存在一种可能的散列算法,该散列算法利用了散列表中的项目数量很少这一事实,从而发挥了优势。您将为每个类创建一个新的哈希表 ,为其指定一个“大小”(用于此哈希表的特定类的字段数)。也许它可以使用这种大小信息来构造一个简单的哈希算法,以最大程度地减少迭代次数。
有什么可能吗?如果是这样,您将如何做?如果不是这样,那么知道为什么无法获得比这些最优的最优选择将很有趣。
解决方法
字段列表有多小?
如果按字段对字段列表进行排序,则可以使用二进制搜索。
对于极少数字段(例如4个字段),如果考虑线性搜索的最坏情况,它将执行与线性搜索几乎相同数量的迭代和键比较。 (在这种情况下,线性搜索将非常有效(速度和内存)。)
要击败线性搜索的一般情况,您需要更多字段(例如8个)。
与线性搜索解决方案一样,它的存储效率也很高。比trie解决方案更有效率的内存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。