首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python 3中的数字组合译码算法

python 3中的数字组合译码算法
EN

Stack Overflow用户
提问于 2014-01-24 06:40:16
回答 1查看 188关注 0票数 0

好的,这就是问题所在。

让我们说:

代码语言:javascript
复制
1 means Bob
2 means Jerry
3 means Tom
4 means Henry

上述两个数字的任何求和组合都是状态/情绪类型,这是程序编码的方式:

代码语言:javascript
复制
7 (4+3) means Angry
5 (3+2) menas Sad
3 (2+1) means Mad
4 (3+1) means Happy
and so on...

如何创建一个解码函数,使其接受添加(编码)值中的一个,如7、5、3、4等,并计算出组合的组合并返回代表组成组合的两个数字的人的名称。请注意,不能重复一个数字来获得情绪结果,这意味着4必须是3+1,也可能不是2+2。因此,对于这个示例,我们可以假设每个状态/情绪代码只有一个可能的组合。现在的问题是,如何在python 3中实现这样的代码?这类问题的算法或逻辑是什么?你如何寻找或检查两个数字的组合?我想我应该运行一个循环,每次添加两个数字,直到结果与状态/情绪代码匹配为止。那能行吗?但是,如果组合的数量增加,这种方法很快就会过时(例如,将4个数字相加在一起而不是增加2个数字)。这样做会花费大量的时间,而且可能效率很低。

我很抱歉,我知道这个问题非常令人困惑,但请耐心等待。让我们试着解决一些问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 06:51:41

使用二进制

如果你想拥有唯一的和,那么给每个可能的“人”分配一个幂为2的数字。这些数字的任意组合的和将唯一地标识在和中使用的数字。

1,2,4,8,16,.

与其提供一个关于正确性的详细证明,我还提供了一个关于这一点的直观论证:任何数字都可以用基2来表示,而且它总是完全是2的一个幂组合的总和。

这个解决方案可能不是最优的。它有实际的限制(32或64个不同的“人”标识符,除非您使用某种BigInt),但取决于您的需要,它可能会起作用。有最小的可能值,二进制比任何其他基数都要好。

示例

(编辑)

这里有一个简短的片段,演示了如何解码和。返回的值是2的幂的指数。count_persons可以任意大,n的范围也可以迭代(就像一个快速的例子)。

代码语言:javascript
复制
#!/usr/bin/python3

count_persons = 64

for n in range(20,30):
    matches = list(filter(lambda i: (n>>i) & 0x1, range(1,count_persons)))
    print('{0}: {1}'.format(n,matches))

输出:

代码语言:javascript
复制
20: [2, 4]
21: [2, 4]
22: [1, 2, 4]
23: [1, 2, 4]
24: [3, 4]
25: [3, 4]
26: [1, 3, 4]
27: [1, 3, 4]
28: [2, 3, 4]
29: [2, 3, 4]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21326087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档