Python论坛  - 讨论区

标题:回复 :Re: [python-chinese] 趣味问题――号码分配

2004年04月26日 星期一 22:19

liux at gdcn.com liux at gdcn.com
Mon Apr 26 22:19:24 HKT 2004

An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040426/bf7de4ec/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年04月26日 星期一 23:04

CHEN Guang (Oliver) oliver_guang_chen at yahoo.com.cn
Mon Apr 26 23:04:33 HKT 2004

伙计,你提问时不是说用了复杂的递归的吗?
用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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年04月26日 星期一 23:24

Zoom.Quiet zoomq at infopro.cn
Mon Apr 26 23:24:20 HKT 2004

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



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号