【发布时间】:2011-03-19 04:49:16
【问题描述】:
让我举个例子,让我们考虑一下字符串: 1000 0101 0111 0000
以及全范围的 2 位字符串: 00 01 10 11
我想知道是否有一个函数具有逆并将 4 个 4 位字符串映射到 2 位字符串。
【问题讨论】:
-
这看起来像是第一年的作业,因为它不是实用编程,我认为它不属于这个网站。
让我举个例子,让我们考虑一下字符串: 1000 0101 0111 0000
以及全范围的 2 位字符串: 00 01 10 11
我想知道是否有一个函数具有逆并将 4 个 4 位字符串映射到 2 位字符串。
【问题讨论】:
从一组n个元素到另一组n个元素的双射数是n!
连续考虑每个目标元素,并选择其匹配的源元素。 首先,您可以在 n 中进行选择。 对于第二个,您可以在 (n-1) 之间进行选择。 ...
您想要 4 个元素的集合之间的双射,因此您有 4 个! = 24 种可能的功能。
00 将在其中六个(3!)中映射到 1000,在其中六个中映射到 0101,依此类推。
我不确定这是否能回答您的问题,但这就是我的理解。
【讨论】:
对于 4 4 位的情况,您有 16 ** 4 或 65536 个情况,这将映射到 8 个 2 位单元,因此这将是一个微不足道的问题。但是,如果您重申您的问题是所有由 4 位到 2 位每字节组成的字符串的空间的双射映射,这是一个不同的问题,是的,有一个解决方案。
一个简单的解决方案是查看每种模式到无限奇数二进制字符串空间的映射。无限奇数字符串的最后一个距离开始有限的距离你所做的是你开始写入位,因为它们出现你有一个标志,如果它设置并且你已经完成了最后一个字节(无论是 2 位还是 4 位,无论你使用)你写一个 1000... 如果标志是明确的,你写 000... 因为有一个是扩展中的最后一个“1”。
其余01 11清旗
对于 4 位集
将 1000 0101 0111 0000 转换为 100001010111000010000 的直接副本... 注意尾部 100 .. 因为设置了标志。如果你对 2 位做相反的设置 标志经过许多州,但 1000.. 在标志的末尾部分,所以在 2 位设置你得到 10 00 01 01 01 11 00 00 没什么大不了的 8 个字节
但是在转换 1000 0101 0111 0100 时,你会得到 1000010101110000... 当查看 2 位设置时,您会得到 10 00 01 01 01 11 10 这比 7 个字节短一个 2 位单元
对于 this bijection 从 4 位设置到 2 位设置,总会有 2n 个字节为两个字节或 2n-1 个字节,其中 n 个 4 位字节。
这种映射到无限奇数文件的方法适用于任何字符串的双射变换 每个字节的任意字节数的无限集合的成员,即使 组成一个字节的位随 n 的函数变化。
【讨论】: