微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在JavaScript中实现可扩展哈希表:如何使用二进制数作为索引

如何解决在JavaScript中实现可扩展哈希表:如何使用二进制数作为索引

我正在研究数据结构,并试图在Javascript中从头开始实现可扩展哈希,我感到困惑。这是我用作参考hash table with binary labels

的示例

示例:将“ john”:35存储在一个大小为8的索引/深度3(二进制哈希的最后3位数字)的表中

  1. “ john”被转换为哈希,例如:13,
  2. 13转换为二进制:1101
  3. 通过查看最后3个数字“ 101”来查找表1101的索引属于哪个

这就是我被困住的地方。我是否想将101转换回十进制形式(即5),然后通过执行array [5]访问索引?有没有一种方法可以用像array [101]这样的二进制格式来标记数组索引(但是使用对象不是更好吗?)?这似乎是很多不必要的额外步骤,可以避免仅使用模(13%8),我是否缺少某些东西?此实现在非JavaScript语言中有用吗?

第一篇文章-预先感谢!

解决方法

在内部,计算机中的所有数据都以二进制形式存储,因此您不能从十进制“转换”为二进制,因为所有内容都已经是二进制(仅显示为用作十进制)。如果要出于调试目的以二进制形式打印数字,可以执行以下操作:

console.log((5).toString(2)); // will print "101"

.toString(2)方法将数字转换为具有数字二进制表示形式的字符串。

您还可以通过以0b开头的二进制形式写数字:

let x = 0b1101; // == 13

如果要获取数字的最后几个二进制数字,请使用模运算符2等于所需数字的幂:

(0b1101 % (2**3)).toString(2) // "101"

在选择表后,您可能希望将尚未使用的其余数字用作表中的索引。我们可以使用位移运算符>>来做到这一点:

(0b1101 >> 3).toString(2) // "1",right three bits cut off

更长的号码:

// Note that underscores don't mean anything,they are just used for spacing
(0b1101_1101 >> 3).toString(2) // "11011" you can see that the right three bits have been cut off

请记住,您可能不应该使用.toString(2)实际上在表中存储任何内容;它只能用于调试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。