问题标签 [gray-code]

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 投票
2 回答
998 浏览

algorithm - 迭代格雷码更改位置的有效方法

有多种迭代n 位格雷码的方法。有些比其他的更有效率。但是,我实际上并不需要格雷码,而是希望遍历格雷码列表中更改的位索引,而不是实际的格雷码。例如,以这个 3 位格雷码列表为例:

000, 001, 011, 010, 110, 111, 101, 100

我想输出 3、2、3、1、3、2、3。这告诉我们需要更改位 3、2、3 等才能获得列表。在这里,我从 1 和左侧开始索引。

一种方法是按顺序计算格雷码,并为每个连续对 (x, y) 计算 (x XOR y) 以确定哪个位发生了变化,然后取 (x XOR y) 的整数对数基数 2。

但是我需要尽可能快的迭代,我的兴趣将是 30-40 位格雷码。

有没有一种有效的方法来做到这一点?

0 投票
1 回答
1473 浏览

binary - 格雷码在进化计算中有什么好处?

有关遗传算法的书籍和教程解释说,使用格雷码在二进制基因组中编码整数通常比使用标准基数 2 更好。给出的原因是编码整数中 +1 或 -1 的变化只需要一位翻转对于任何数字。换句话说,相邻整数在格雷码中也是相邻的,格雷编码中的优化问题最多有与原始数值问题一样多的局部最优。

与标准 base 2 相比,使用格雷码还有其他好处吗?

0 投票
1 回答
672 浏览

algorithm - 在 o(1) 中生成集合的所有组合

int {1,2,3} 集合的组合是:

{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3}

常见的解决方案是跟踪索引的代表性位掩码。

从我的 0-7 数字示例中:

000,001,010,011,100,101,110,111

该算法允许迭代解决方案,每次生成器遍历每个位并决定是否插入项目,因此它创建下一个运行时间为 O(n) 的组合。

格雷码:(来自维基百科)反射二进制码(RBC),在弗兰克格雷之后也被称为格雷码,是一种二进制数字系统,其中两个连续的值只有一位不同

如果我们只使用灰色数字,我们会得到这个数字范围:

000,001,011,010,110,111,101,100

结果以不同的顺序相同:

{},{1},{1,2},{2},{2,3},{1,2,3},{1,3},{3}

但在这里我们看到差异只有一项。是否可以使用格雷码范围在 O​​(1) 中实现生成器。

我知道如果迭代,返回的列表无论如何都会有 O(n) 运行时间。

0 投票
1 回答
13015 浏览

binary - 9's complement of a 4-bit binary number

I don't understand how to calculate the 9's complement of a binary number. I can apply it to decimal ones, example 15 = (9-1)(9-5) ) 84 then I thought to proceed with a binary -> decimal -> 9's complement -> binary conversion but I guess it's not the right way to act.

enter image description here

0 投票
1 回答
28 浏览

string - 对字符串(最好是一个值)进行编码,使得更接近的值意味着更相似的字符串?

我正在寻找一种可以将每个字符串编码为唯一数字的编码,这样 ->

  1. 每两个相似的字符串必须具有彼此接近的值。
  2. 每两个彼此接近的值必须代表相似的字符串。

字符串的相似性意味着一个字符串中的一些替换可以形成另一个字符串。不考虑添加或删除。

字符串只能有字符 A、C、T 和 G(只有四种可能)

我尝试过的事情->

  1. 格雷码 -> 满足第二个条件但不满足第一个条件。相似的两个字符串并不意味着它们在格雷码中具有更接近的值。

  2. 与参考字符串的汉明距离 -> 显然,如果汉明距离相同,则根本不意味着字符串相似,只是它们与参考字符串的距离相同。所以它不满足第二个标准。

如果您知道任何针对此特定问题的方法,请提出一种方法。

0 投票
2 回答
345 浏览

vhdl - VHDL Data Flow description of Gray Code Incrementer

I am trying to write the VHDL code for a Gray Code incrementer using the Data Flow description style. I do not understand how to translate the for loop I used in the behavioral description into the Data Flow description. Any suggestion?

This is my working code in behavioral description

#xA;
0 投票
0 回答
81 浏览

php - 求解输入范围 62 < $input <= 65 的格雷码

以下代码显示了最后一个 $input 的格雷码

上面的代码适用于 $input 值 62,但不适用于 rang 62 < $input <= 65。任何人都可以解决它吗?

0 投票
2 回答
180 浏览

c++ - 在格雷码中选择一些数字编码

我必须编写一个程序来显示一些格雷码编码的数字。我已经在此页面中找到了用 C++ 编写的算法(https://www.geeksforgeeks.org/given-a-number-n-generate-bit-patterns-from-0-to-2n-1-so-that-连续模式不同一位/)。

但是我想创建一种新方法来删除连续有两个“1”并且末端有“1”的数字(左和右)。

示例:对于 n = 3,我们得到以下数字:

现在我想删除这个数字: 011 、 110 、 111 、 101 并在列表中显示其他数字。

我的想法是创建一个向量向量。例如,当 n = 3 时:{{000},{001},{011},{010},{110},{111},{101},{100}}。

对于大小,它将是这样的:

例如:vector[0][1] = {0} 和 vector[1][2] = {1} 如果我的尺寸是正确的。

现在要删除连续有两个“1”并且末端有“1”的数字,我可以使用以下代码:

现在的问题是我不知道如何将结果存储在我的向量中用 C++ 编写的格雷码中,或者也许有一种方法可以在不使用向量的情况下比较此代码中的两个数字。

0 投票
1 回答
41 浏览

python - n 个二进制值的所有组合,其顺序是只有一个组件与先前的组合相比发生变化

下面是一个包含 2 个二进制值的所有可能组合的向量:

现在,问题是我如何生成两个二进制值的相同组合的序列,其中每个二进制值与序列中的前一个相比只有一个组件发生变化,例如:

0 投票
1 回答
4403 浏览

python-imaging-library - 使用 PIL 将灰度图像转换为 RGB 图像

我正在尝试在 python 中将灰度图像转换为 RGB 图像格式的代码,但是每次尝试执行它时都会引发 TypeError。

我的代码如下:

我得到的错误是:

任何帮助都将是非常可观的。