鱼C论坛

 找回密码
 立即注册
查看: 2669|回复: 17

PYTHON代码设计

[复制链接]
发表于 2017-7-25 18:01:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 如若忽然 于 2017-7-25 18:13 编辑

{1,2,3,~,25}的所有子集中的元素和,用PYTHON
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-25 22:32:11 | 显示全部楼层
子集的元素和,那么你要先知道有多少个子集。
就是组合的问题,还有集合本身也是自己的子集。
找出所有的排列组合,然后求和就行了。

思路提供了。具体代码自己想吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-25 22:35:56 | 显示全部楼层
本帖最后由 向西而笑 于 2017-7-25 22:48 编辑

什么意思?
有数学公式取巧的

假设该集合为A={a1,....an}
则其共有2^n个子集,其中任一元素将出现在2^(n-1)个子集中,
故元素和为2^(n-1)*(a1+....+an)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-25 22:55:05 | 显示全部楼层
yongxi 发表于 2017-7-25 22:32
子集的元素和,那么你要先知道有多少个子集。
就是组合的问题,还有集合本身也是自己的子集。
找出所有的 ...

思路我也知道,代码不会写.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-25 22:55:42 | 显示全部楼层
向西而笑 发表于 2017-7-25 22:35
什么意思?
有数学公式取巧的

‘其中任一元素将出现在2^(n-1)个子集中’这是为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-25 22:55:46 | 显示全部楼层
向西而笑 发表于 2017-7-25 22:35
什么意思?
有数学公式取巧的


.
>>> set1 = set([ i for i in range(26) ])
>>> set1
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25}
>>> 2**(len(set1)-1)*(sum(set1))
10905190400
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-25 22:59:54 | 显示全部楼层
如若忽然 发表于 2017-7-25 22:55
‘其中任一元素将出现在2^(n-1)个子集中’这是为什么


我百度的数学公式,这个我记得高中学了
举例:{1,2,3}
那么它的子集是{ {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}和它自身
1是不是出现了2^(n-1)?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-25 23:01:34 | 显示全部楼层

那个数学公式你怎么找到的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-25 23:08:00 | 显示全部楼层

你答案好像错了 是5452595200
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-25 23:09:45 | 显示全部楼层
向西而笑 发表于 2017-7-25 22:59
我百度的数学公式,这个我记得高中学了
举例:{1,2,3}
那么它的子集是{ {1}, {2}, {3}, {1,2}, {1, ...

是的,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-25 23:19:10 | 显示全部楼层

。。。。。。
反正用公式很快,但是正确的公式我也不知道,我是百度的,百度可不可信我就不知道啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-25 23:24:28 | 显示全部楼层
上面的朋友已经给出了公式法了,我这里简单给出一个解释:
对于n个元素的一个集合U例如{1,2,3...n}的所有子集,可以看成是:
(子集{1,2,3...n-1}的所有子集的集合R),和(R中的所有集合再加入一个元素d形成的集合的集)的并集,由于R中有2**(n-1)个集合,所以元素n也出现2**(n-1)次,对于集合U中的每一个元素都是如此。
所以对于任何一个元素数为n的集合U的所有子集的和,都有 和==[2**(n-1)]*sum(U)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-26 10:45:44 | 显示全部楼层
向西而笑 发表于 2017-7-25 23:19
。。。。。。
反正用公式很快,但是正确的公式我也不知道,我是百度的,百度可不可信我就不知道啦{:10_2 ...

公式是对的,我用{1,2,3,4}验算了。那就是代码错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-26 10:57:30 | 显示全部楼层
忘れえぬ物語 发表于 2017-7-25 23:24
上面的朋友已经给出了公式法了,我这里简单给出一个解释:
对于n个元素的一个集合U例如{1,2,3...n}的所有 ...

d就是n,也就是U的最后一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-26 11:10:29 | 显示全部楼层
如若忽然 发表于 2017-7-26 10:57
d就是n,也就是U的最后一个元素

唔……我这里用字母其实是想突出集合的无序性,其实把哪一个单独拿出来重复步骤都可以。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-26 12:44:30 | 显示全部楼层
忘れえぬ物語 发表于 2017-7-26 11:10
唔……我这里用字母其实是想突出集合的无序性,其实把哪一个单独拿出来重复步骤都可以。

谢谢啦,这个思路很棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-26 15:27:19 | 显示全部楼层
本帖最后由 小锟 于 2017-7-26 15:34 编辑
list1 = [1,2,3,4]
dic = set()

def fun(list1 , s = 0):
    global  dic
    if len(list1) == 1 :
         return s
    else:
        for i in range(len(list1)) :
            a = list1.pop(i)
            if str(list1) in dic:
                list1.insert(i,a)
                continue
            dic.add(str(list1))
            s += sum(list1)
            s = fun(list1 , s)
            list1.insert(i,a)
    return s

print(fun(list1))
#答案没算上真子集
1-25的话速度很慢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-26 21:11:14 | 显示全部楼层
小锟 发表于 2017-7-26 15:27
1-25的话速度很慢

已经很不错了谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-23 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表