2004年04月26日 星期一 22:19
An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040426/bf7de4ec/attachment.htm
2004年04月26日 星期一 23:04
伙计,你提问时不是说用了复杂的递归的吗? 用SQL语言拼联接查询就不用劳您大驾亲自递归了吧? 下次记得说话要前后一致才好哟…… --- liux at gdcn.com 的正文: --------------------------------- ----- 原邮件 ----- 从: "CHEN Guang (Oliver)" <oliver_guang_chen at yahoo.com.cn> 日期: 星期一, 四月 26日, 2004 下午9:53 主题: Re: [python-chinese] 趣味问题――号码分配 > 如果仅仅问有多少种算法,那就是10的阶乘了。 > > 您的问题是此类问题的一个特例,更普遍的问法是“有X个罐子分别编号1、2、3、4……、X;Y(Y>=X)个球分别编号1、2、3、4……、Y,任意取出X个球以一罐一球的方式放入罐中,问有多少种放法?”这就是PXY(X为上标,Y为下标)的定义了,当X和Y都等于10时就是您的问题了,结果就是P > 10 10(一个上标,一个下标)也就是10的阶乘。 下次记得回贴要看贴噢~呵呵,我问的是罐与球完全没有对应的排列有多少种~:-目 > > 如果要理解一下,可以固定Y=4,然后考查X=1时有多少种放法,X=2时有多少种放法…… > > 可是如果要让计算机将每种可能的情况都尝试一遍,或者都打印出来,控制流就非常复杂了。 > > 我曾在七年前编制穷举法解幻方(纵横图)程序时考虑过这个问题,结论是:单纯递归无能为力,GOTO语句必不可少。好在当时使用的 > Turbo C > 提供了这个语句,才得以解决。可惜那个程序现在找不到了,不过您若感兴趣,我可以回忆一下,写一小段给您。当然用C语言写了,Python不提供GOTO有什么办法…… > 随便找本大学的组合数学教材就应该有全排列算法,都是很成熟的算法了,比较实用的最少也有三四种。 再重复一次,用SQL语言拼联接查询,就可以有迪卡尔积,这是最简单最偷懒的全排列程序。 > > --- liux at gdcn.com 的正文: > --------------------------------- > > 现有十个分别标有1-10号码的球,十个分别标有1- > 10号码的罐子。每个球放进一个罐子里,现要求每一个球都不能放在同一号码的罐子中,请问有多少种放法? > 附件中是我的一种解法,本来以为是一个简单的递归,后来作到凌晨才发现满不是这么一回事儿,要复杂得多。到现在我也不知道这个解是不是对的,欢迎大家讨论。 > > 记得上学时作过这道题,当时是用的统计知识,解法要更简单些。 > > 还有一种最可靠的方法――只是过于“暴力”――生成一个全排列列表,然后用筛法剔除不合要求的项,最后只要count一下即可。只是忘了全排列算法了……脸红…… > > 书到用时方恨少啊! > > PS:我用了那么复杂的递归,运算起来却出乎我意料的快,看来以前是低估了Python解释器的工作效率。 > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > _________________________________________________________ Do You Yahoo!? 惠普TT游戏剧,玩游戏,中大奖! http://cn.rd.yahoo.com/mail_cn/tag/SIG=1402c0to2/**http%3A%2F%2Fhp.allyes.com%2Flaserjet%2Fgamestory%2Findex.html%3Fjumpid%3Dex_hphqapcn_MongooseLJ1010%2F201073CN407016%2FYahoo
2004年04月26日 星期一 23:24
Hollo liux: 嗬嗬嗬! 嗯嗯! 数学基础N年没有使用了! 如果各位还想挑战智力的话: 编程范例-算24游戏征解 http://www.chinesepython.org/cgi_bin/moingb.cgi/_b7_a2_b1_ed_3a_b1_e0_b3_cc_b7_b6_c0_fd_2d_cb_e324_d3_ce_cf_b7_d5_f7_bd_e2 以及去 robocode 中华联盟 http://www.robochina.org/index.php 开发战斗机器人!不过记住要使用 Jython 开发哪! /******** [2004-4-26]22:58:27 ; you wrote: liux at gdcn.com> ----- 原邮件 ----- liux at gdcn.com> 从: "CHEN Guang (Oliver)" liux at gdcn.com> <oliver_guang_chen at yahoo.com.cn> liux at gdcn.com> 日期: 星期一, 四月 26日, 2004 下午9:53 liux at gdcn.com> 主题: Re: [python-chinese] 趣味问题――号码分配 >> 如果仅仅问有多少种算法,那就是10的阶乘了。 >> >> 您的问题是此类问题的一个特例,更普遍的问法是“有X个罐子分别编号1、2、3、4……、X;Y(Y>=X)个球分别编号1、2、3、4……、Y,任意取出X个球以一罐一球的方式放入罐中,问有多少种放法?”这就是PXY(X为上标,Y为下标)的定义了,当X和Y都等于10时就是您的问题了,结果就是P >> 10 10(一个上标,一个下标)也就是10的阶乘。 liux at gdcn.com> 下次记得回贴要看贴噢~呵呵,我问的是罐与球完全没有对应的排列有多少种~:-目 >> >> 如果要理解一下,可以固定Y=4,然后考查X=1时有多少种放法,X=2时有多少种放法…… >> >> 可是如果要让计算机将每种可能的情况都尝试一遍,或者都打印出来,控制流就非常复杂了。 >> >> 我曾在七年前编制穷举法解幻方(纵横图)程序时考虑过这个问题,结论是:单纯递归无能为力,GOTO语句必不可少。好在当时使用的 >> Turbo C >> 提供了这个语句,才得以解决。可惜那个程序现在找不到了,不过您若感兴趣,我可以回忆一下,写一小段给您。当然用C语言写了,Python不提供GOTO有什么办法…… >> liux at gdcn.com> 随便找本大学的组合数学教材就应该有全排列算法,都是很成熟的算法了,比较实用的最少也有三四种。 liux at gdcn.com> 再重复一次,用SQL语言拼联接查询,就可以有迪卡尔积,这是最简单最偷懒的全排列程序。 >> >> --- liux at gdcn.com 的正文: >> --------------------------------- >> >> 现有十个分别标有1-10号码的球,十个分别标有1- >> 10号码的罐子。每个球放进一个罐子里,现要求每一个球都不能放在同一号码的罐子中,请问有多少种放法? >> 附件中是我的一种解法,本来以为是一个简单的递归,后来作到凌晨才发现满不是这么一回事儿,要复杂得多。到现在我也不知道这个解是不是对的,欢迎大家讨论。 >> >> 记得上学时作过这道题,当时是用的统计知识,解法要更简单些。 >> >> 还有一种最可靠的方法――只是过于“暴力”――生成一个全排列列表,然后用筛法剔除不合要求的项,最后只要count一下即可。只是忘了全排列算法了……脸红…… >> >> 书到用时方恨少啊! >> >> PS:我用了那么复杂的递归,运算起来却出乎我意料的快,看来以前是低估了Python解释器的工作效率。 ********************************************/ -- Free as in Freedom Zoom.Quiet #=========================================# ]Time is unimportant, only life important![ #=========================================# sender is the Bat!2.02 CE
Zeuux © 2024
京ICP备05028076号