[請益] 如何有效率的產生大筆不重覆的陣列值?

看板PHP作者 (sob)時間19年前 (2006/12/21 20:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/3 (看更多)
如何有效率的產生不重覆的陣列值 拿5個bit的值來說明好了 我要產生能像以下規則的陣列 (因為打字的關係,所以[x,x,x,x,x]用xxxxx表示) step1:01234 step2:01243 step3:01324 step4:01342 step5:01423 step6:01432 step7:02134 step8:02143 ... ... n-1:43201 n :43210 我想產生像上面這樣的陣列 ------------------------------ 我現在的作法是用for迴圈硬幹 流程就像下面這樣 (5bit的話,會用5進制去進位) (n bit則改用 n進制去進位) 00000 00001 00002 00003 00004 00010 00011 00012 00013 00014 00020 ... ... 44444 然後再用if()判斷取出「不重覆的陣列」 取出像是 01234 02143 .... 我這種做法的效率太差 5bit的話,for迴圈要跑5^5=3125次 7bit的話,for迴圈要跑7^7=82萬次 9bit的話,for迴圈要跑9^9=3億次 偏偏我的筆數非常多 程式約要9分鐘才跑完 有沒有辦法更有效率的直接產生像這樣子的程式 step1:01234 step2:01243 step3:01324 step4:01342 step5:01423 step6:01432 step7:02134 step8:02143 ... ... n-1:43201 n :43210 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.142.122

12/21 22:36, , 1F
permutation
12/21 22:36, 1F
文章代碼(AID): #15YeGtAy (PHP)
文章代碼(AID): #15YeGtAy (PHP)