[問題] 排列組合問題

作者: feynmankao (最愛我的老婆!)   2016-05-19 00:50:04
大家好,我是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
作者: IKAFIRE (沒有)   2016-05-19 01:08:00
itertools.product()再用你的規則下去篩選?
作者: chienweichih ((゚д゚))   2016-05-19 01:12:00
直覺的做法是三個條件寫三個if, 然後暴力解
作者: bibo9901 (function(){})()   2016-05-19 01:39:00
其實就是{1,3}和{2,4}兩類交錯排列而已只要先產出字典序最小的 剩下的用旋轉就好了嗯...想想不用這麼麻煩
作者: IKAFIRE (沒有)   2016-05-19 02:02:00
他同數字可以相鄰,所以不是13和24交錯排
作者: SocketAM2 (AM2)   2016-05-19 02:13:00
ATCG
作者: feynmankao (最愛我的老婆!)   2016-05-19 02:29:00
請問各位高手,能多給一些線索或是資料嗎?我是真的菜不是假的菜,如果可以多給一點線索的話,我應該可以模仿寫出來~ 謝謝大家~
作者: s06yji3 (阿南)   2016-05-19 02:32:00
Back tracking
作者: bigpigbigpig (To littlepig with love)   2016-05-19 02:37:00
用 zip 和 set 就可以搞定了 :)
作者: s06yji3 (阿南)   2016-05-19 02:37:00
https://goo.gl/PRz1gs我好像忘了加重複判斷
作者: mikapauli (桜花)   2016-05-19 02:51:00
把將條件3變成固定頭尾所得到集合記為L(n,h,t)則L(n)為其中12個L(n,h,t)的連集L(n,h,t)為9個L(n-2,h,t)的連集,遞迴可得。看起來像被條件3篩選的雙生成自由群
作者: feynmankao (最愛我的老婆!)   2016-05-19 03:24:00
m大真眼尖,這的確跟F2(2個生成元的自由群)有關謝謝大家,我會研究看看的~
作者: bigpigbigpig (To littlepig with love)   2016-05-19 07:41:00
作者: feynmankao (最愛我的老婆!)   2016-05-19 08:38:00
感謝大豬大~
作者: mikapauli (桜花)   2016-05-19 16:05:00
minimal normal subgroup?好像也不是
作者: feynmankao (最愛我的老婆!)   2016-05-24 09:44:00
我是要cyclically reduced words的列表

Links booklink

Contact Us: admin [ a t ] ucptt.com