JS性能 - 哈希两个数字,避免数组创建

时间:2015-11-17 06:49:32

标签: javascript performance hashmap bit-manipulation bit-shift

我需要最有效的方法来重新创建和读取此哈希映射中的值

  

所有数字都是正数,如果这有助于哈希/位移清酒

     

myArray[someX][someY][someHeight && someWidth]

     

我可以使用 someX 某些,因为它们是唯一且已知的吗?

我将数百万次存储和读取此数组并需要使用 someHeight someWidth

进行比较

我不想创建一个集合(数组或对象)来存储两个数字,因为我也在重写这个数据结构,我想我可以在没有数千个数组的情况下逃脱。我还需要一种廉价的方式将它们分开。

有人能否阐明1)访问变量,2)数组与原始创建,以及3)相关数学运算的速度(按位)的性能

这个数据结构的要点是让我访问随机位置并与其他点进行数百万次比较

但我不确定如何使用基本数学或按位移位操作将两者唯一存储在一起

由于

如果您可以将所有数值存储为一个,而不是使用数组数组

,则可获得奖励积分

1 个答案:

答案 0 :(得分:0)

  

jsperf.com

上的按位总是更快

对于0到65536(16位)之间的两个整数:

  • 左移第一个16个插槽(如打字机)
  • 将num2位掩码应用于现在空置的右侧(000000000000000
var num1 = 1234,
    num2 = 5678;

var hash = (num1 << 16 | num2); // shift num1 left and paste num2

// shift right, num2 falls off
var retrievedNum1 = hash >>> 16;

// shift left, num1 falls off, shift right
var retrievedNum2 = hash << 16 >>> 16;