【问题标题】:Hamming Code: Number of parity bits汉明码:奇偶校验位数
【发布时间】:2014-03-06 02:00:33
【问题描述】:

我正在尝试在 java 中编写一个方法,该方法将输入 any 0 或 1 位数字,并在使用汉明码编码后输出该行。

当知道输入的位数(在本例中为 16)时,我已经设法编写代码,因为知道输入中的位数,我立即知道必须添加的奇偶校验位数( 5 在这种情况下)到最终输出中的总共 21 位数字。我正在使用 int 数组,所以我需要在开始时声明一个大小,我的代码基于这些确切的大小工作。

你们能想出任何方法/算法,可以仅根据输入位数给我输出的位数(在将相关的奇偶校验位数添加到输入位数之后)吗?

或者我必须以完全不同的方式解决这个问题吗?有什么建议?提前谢谢!

干杯!

【问题讨论】:

  • 这个好问题似乎离题了;最好在math.stackexchange.com 上提问和回答。
  • 确实,这似乎更像是一道数学题,而不是实际的编程题。

标签: java algorithm hamming-code


【解决方案1】:

您的输入是字符串还是单个位?如果输入为字符串,可以将每个字符转换为位,字符串的长度给你数组的长度。

如果您需要一次输入一个位,请将它们存储在 ArrayList 中。输入所有位后,您可以轻松地将列表转换为数组,或使用列表的大小等。

【讨论】:

  • 获取输入的位数不成问题。我的问题是:我该如何编写,以便我的方法根据输入中的位数自行知道/计算它必须添加多少奇偶校验位?
【解决方案2】:

据我了解,您在 32 位输入时获得第 6 个奇偶校验位,在 64 位获得第 7 个奇偶校验位,等等。所以您需要的是 floor(lg(n)) + 1,在 java 中您可以使用 32 - Integer.numberOfLeadingZeros(n) 获得。

假设您的输入完全由 0 和 1 组成,您会这样做

int parityDigits = 32 - Integer.numberOfLeadingZeros(input.length());

【讨论】:

  • 这很好用!但前提是输入高于 4 位和 2 的幂。我想这是最好的,特别是因为我的作业中没有定义术语 any。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 2017-04-24
  • 2015-04-04
  • 1970-01-01
  • 2016-01-31
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多