我想写一个模块/函数,它输入一个无符号整数(32位)并输出8位值。 输出值必须按相对顺序作为输入。 并且输出值一旦分配就不应改变。
测试:
输入:随机生成的32位整数
输出:范围0-255
重复动作256次..直到输出值耗尽。
所有输出值应与输入值的顺序相同。
编辑:根据评论,无法找到完美的解决方案。 但是,我们能否找到最佳解决方案。即不比较输入(32位)值..生成大小为8位的相对顺序输出。
答案 0 :(得分:1)
假设第一个输入数字是123456.您不知道以下数字是小于还是大于此数字。所以最好的办法是在可用范围的中间输出一个数字:127。
存储此作业(123456,127)。
现在,如果第二个数字更大,例如234567,从输出范围的上半部分输出一个数字: (234567,191)
使用以下每个数字,输出相应输出范围的中心: (200000,159)
你明白了。
当然,根据输入顺序,通常无法为每个输入分配唯一的输出。
最坏情况: 输入序列2 ^ 31,2 ^ 30,...即2147483648,1073741824产生输出127,63,31,15,7,3,1,0,0,...... 因此,您只能使用256个可用输出数中的8个。
然而,您可以在输入范围的极限附近微调这个。如果输入的数字小于127,则输出== input。
答案 1 :(得分:0)
从你的评论反对简单地获取最高位,并在“直到输出值耗尽”的行之间读取,声音就像你想要一个算法:
0..255
。但当然这只是一种排序算法。对256个输入进行排序,然后输出值是排序结果中基于0的索引。
如果您正在寻找某种方法来返回输出值而不首先检查所有输入,那么很明显,这是不可能的,因为您的“输出值一旦分配就不应该改变”要求。
答案 2 :(得分:0)
这只是一种伪装的排序问题。
在看到所有值之前,您无法输出任何内容 - 除非您指定了问题,并且输入数量有限制。
如果您具有256个输入的直观限制,无论您为第一个输入分配什么输出,您都可以提供少于255个输入,这样您就无法映射它们。