首页 > 解决方案 > 重新排列二进制数字

问题描述

假设我有一本从 [0,1...n] 到 [0,1...n] 的字典。我现在想通过根据这本字典移动二进制数字来在 n+1 位数字之间进行转换。如果 n = sum(c_i*2^i),则对于任何值 c_i,f(n,dic) = sum(c_i*2^dic[i])。

例如,假设我的字典是 {0:1,1:2,2:0},那么 5, (101) 将变为 3, (011)。给定一个字典 {0:3,1:2,2:0,3:4,4:1},那么 21, (10101) 将变为 11, (01011)。

我正在尝试以相对较快的方式在 python 中执行此操作。我要对所有 n+1 位数字应用这种转换,所以现在我创建一个数组,其索引是 n+1 位数字的键,但它很慢。

def bit(dic):
    out = []
    for i in range(2**(len(dic)):
        appending = 0
        for k in range(len(dic)):
            if not i%2**k == i%2**k+1:
                appending += 2**dic[k]
        out.append(appending)
    return out

作为另一个问题,如果多个键可以对应于相同的值 n,根据 dic,我想返回 2^(sum c_keys) if all(sum c_keys < 2) else -1,这似乎很烦人检查一下,有没有聪明的解决方案?

标签: pythonbinary

解决方案


推荐阅读