作者feynmankao (最爱我的老婆!)
看板Python
标题[问题] 排列组合问题
时间Thu May 19 00:50:04 2016
大家好,我是python初学者,碰到一个各位高手应该都可以秒杀的问题
我现在想要弄出一个list含有一个变数n: 先称为L(n)
L(n) 是一堆list 组成的 list。
L(1) = [[1],[2],[3],[4]]
L(2) = [[1,1],[1,2],[1,4],[2,1],[2,2],[2,3],[3,2],[3,3],
[3,4],[4,1],[4,3],[4,4]]
...
简单的说 L(n) 是所有长度为 n 且满足下列条件(1)(2)(3) list L(n)[i] 的 list
条件(1): 在 L(n)[i] 里的 元素都取自 [1,2,3,4]
条件(2): 元素1和3 不能相邻; 2和4不能相邻
条件(3): L(n)[i] 头尾二个元素要满足,如果头是1,尾就不能是3;
头是3,尾就不能是1; 头是2,尾就不能是4; 头是4 尾就不能是2
------
比如说 [1,1,1], [1,1,2],[1,1,4],[1,2,1],[1,2,2]... 都会在L(3) 里
但 [1,3,2], [1,2,4] 不满足(2); [1,2,3], [4,1,2] 不满足(3) 都不会在L(3)里
------
我保证这不是学校作业,这是我研究上要用到的计算,不过因为初学Sage,
所以python语言还不是很熟练,希望大家指点一下。
感恩~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 66.254.234.150
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1463590207.A.392.html
1F:推 IKAFIRE: itertools.product()再用你的规则下去筛选? 05/19 01:08
2F:→ chienweichih: 直觉的做法是三个条件写三个if, 然後暴力解 05/19 01:12
3F:→ bibo9901: 其实就是{1,3}和{2,4}两类交错排列而已 05/19 01:39
4F:→ bibo9901: 只要先产出字典序最小的 剩下的用旋转就好了 05/19 01:42
5F:→ bibo9901: 嗯...想想不用这麽麻烦 05/19 01:52
6F:推 IKAFIRE: 他同数字可以相邻,所以不是13和24交错排 05/19 02:02
7F:推 SocketAM2: ATCG 05/19 02:13
8F:→ feynmankao: 请问各位高手,能多给一些线索或是资料吗?我是真的 05/19 02:29
9F:→ feynmankao: 菜不是假的菜,如果可以多给一点线索的话,我应该可 05/19 02:30
10F:→ feynmankao: 以模仿写出来~ 谢谢大家~ 05/19 02:31
11F:推 s06yji3: Back tracking 05/19 02:32
12F:→ bigpigbigpig: 用 zip 和 set 就可以搞定了 :) 05/19 02:37
14F:推 s06yji3: 我好像忘了加重复判断 05/19 02:50
15F:→ mikapauli: 把将条件3变成固定头尾所得到集合记为L(n,h,t) 05/19 02:51
16F:→ mikapauli: 则L(n)为其中12个L(n,h,t)的连集 05/19 02:52
17F:→ mikapauli: L(n,h,t)为9个L(n-2,h,t)的连集,递回可得。 05/19 02:53
18F:→ mikapauli: 看起来像被条件3筛选的双生成自由群 05/19 02:57
19F:→ feynmankao: m大真眼尖,这的确跟F2(2个生成元的自由群)有关 05/19 03:24
20F:→ feynmankao: 谢谢大家,我会研究看看的~ 05/19 03:24
22F:→ feynmankao: 感谢大猪大~ 05/19 08:38
23F:→ mikapauli: minimal normal subgroup? 05/19 16:05
24F:→ mikapauli: 好像也不是 05/20 00:16
25F:→ feynmankao: 我是要cyclically reduced words的列表 05/24 09:44