问题标签 [bitcount]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
234 浏览

android - 在 SQLite 中计算汉明距离

我想比较多个图像并使用汉明距离检索最相似的图像。唯一的问题是移动平台上最常用的数据库 SQLite 不支持像 bitcount 这样的汉明距离所需的重要功能。

2年前发布了类似的问题,但它似乎没有任何解决方法,或者SQLite目前是否支持这些功能。

有谁知道如何解决这个问题,或者对如何在移动平台上进行图像比较而不破坏 CPU 和存储有更好的想法?

谢谢。

0 投票
3 回答
1114 浏览

java - Long.bitCount() 如何找到设置的位数?

我知道这是代码。但我无法理解它的作用

0 投票
3 回答
1587 浏览

java - Java - bitCount() 的大 O?

比特数的大 O 是多少?我不确定该方法是如何工作的,但我认为它是在 O(logn) 中完成的。

特别是使用此代码(其中 x = 4,y = 1):

0 投票
1 回答
402 浏览

binary - 计算 Redshift 列中每个位位置的“1”值的数量

我的 Redshift 表中有 BIGINT 列,我想要一个查询:

  1. 计算该列所有行中二进制值的每个位位置出现值“1”的次数
  2. 将以一种我能够获取x最高位位置的方式显示它。

例如(我已经将整数值写为二进制以简化示例):

将返回如下表:

在这种情况下,我将能够获得前五位 bit_position:(3,4,6,7,2)

注意:我的列可能最多有 64 个位位置。

0 投票
2 回答
3480 浏览

assembly - 使用 AVX-512 或 AVX-2 对大数据计数 1 位(人口计数)

我有一大块内存,比如 256 KiB 或更长。我想计算整个块中 1 的位数,或者换句话说:将所有字节的“人口计数”值相加。

我知道 AVX-512 有一条VPOPCNTDQ 指令,它计算 512 位向量中每个连续 64 位中 1 的位数,而 IIANM 应该可以在每个周期发出其中一个(如果适当的 SIMD 向量寄存器是可用) - 但我没有任何编写 SIMD 代码的经验(我更像是一个 GPU 人)。此外,我不是 100% 确定编译器对 AVX-512 目标的支持。

在大多数 CPU 上,仍然不(完全)支持 AVX-512;但 AVX-2 已广泛使用。我无法找到类似于 VPOPCNTDQ 的小于 512 位的矢量化指令,所以即使理论上我也不确定如何使用支持 AVX-2 的 CPU 快速计算位数;也许存在这样的东西,而我只是以某种方式错过了它?

无论如何,我很欣赏一个简短的 C/C++ 函数 - 使用一些内部包装库或内联汇编 - 对于两个指令集中的每一个。签名是

笔记:

0 投票
3 回答
824 浏览

bit-manipulation - 矩阵转置和人口计数

我有一个大小为 N 的方形布尔矩阵 M,按行存储,我想计算每列设置为 1 的位数。

例如对于 n=4:

我显然可以

  1. 将矩阵 M 转置为矩阵 M'
  2. popcount M' 的每一行。

存在通过位操作进行矩阵转置和弹出计数的良好算法。

我的问题是:是否有可能将这些算法“合并”成一个单一的算法?

请注意,对于 64 位架构,N 可能非常大(比如 1024 或更多)。

0 投票
2 回答
142 浏览

java - Java 中 Long 变量的 XOR 操作和 BitCount 返回 java.lang.NumberFormatException

我正在尝试对 Java 中的两个 64 位 Long 变量进行 XOR 操作。问题是当我在变量中添加超过 16 位时它会失败。

例如,这有效并返回 7:

如果我将 h1 和 h2 的值增加到:

我收到一个错误:

线程“主”java.lang.NumberFormatException 中的异常:对于输入字符串:“11000110000110100110101101001101”

java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
在 java.lang.Long.parseLong(Long.java:592)
在java.lang.Long.parseLong(Long.java:631)

如果我将它加倍(我想要计算的 64 位)也是一样的:

关于为什么在 16 位以上失败的任何帮助?