【发布时间】:2014-09-08 21:53:12
【问题描述】:
我需要在 Javascript 中为国际象棋引擎实现 Zobrist 散列,我想知道实现这一点的最佳方法是什么。现在,我不是计算机科学家,也从来没有正式的算法和数据结构类,所以如果我在这方面有点偏离,我很抱歉......
据我了解,我需要一个 64 位散列函数来将位置编码为低于该位置的位置会引发太多冲突。现在在 javascript 中,我只能访问 32 位数字。还有一个问题是我如何实现哈希表以及它是如何由节点中的 V8 引擎“在幕后”实现的。
我可以将它作为长度为 TABLESIZE 的 javascript 数组,然后执行以下操作:
var table = new Array();
table[hashCodeLo % TABLESIZE] = {
hashCodeLo: hashCodeLo,
hashCodeHi: hashCodeHi,
someProperty: someValue
};
其中 hashCodeLo 和 hashCodeHi 表示代码的高 32 位和低 32 位,TABLESIZE
var table = {};
table[hashCode] = {
someProperty: someValue
}
这里的 hashCode 只是我的 64 位 hashCode 的字符串表示。由于我不确定“字典模式”如何在幕后工作,我不确定哪个更好。另外我不知道我是否通过使用“1983981918391”之类的键而不是更紧凑的表示形式来使用更多内存:
hashCode = String.fromCharCode(FIRST_16BITS, SECOND_16BITS, THIRD_16BITS, FOURTH_16BITS)
我什至不确定这是否符合我的预期......
由于这是引擎的关键部分,因此我希望尽可能多地发挥性能,因此不胜感激。
【问题讨论】:
-
你在哪个环境下运行 v8 怎么样?
标签: javascript performance hashtable v8