2011-07-15 61 views
0

最近我一直在閱讀關於樂透購物和組合生成。我想我會試試看,看看代碼。我設法根據一些VB拼湊了一個數字輪,但是在移植它時引入了一個有趣的錯誤。 http://www.xtremevbtalk.com/showthread.php?t=168296生成組合

它允許你基本上識別任何組合。你給它提供N個數字,K個選擇和一個索引,並按照字典順序返回這個組合。 它在低值時效果很好,但隨着球的數量(N)的增加,我會得到更多的數字,例如。 40個球,2個鎬。第780號組合返回40和41!我增加的選項和數字越高,這似乎發生在運行結束時,前面的數字是由於循環而產生的。

我找到方法來產生可能組合的數量在VB論壇沒有做出很大的意義,所以我發現了一個簡單的辦法: http://www.dreamincode.net/code/snippet2334.htm 後來我發現,用雙打似乎引起分辨率不足。使用長時間的工作,但現在我不能使用更高的N值,因爲乘法超出範圍很長!然後我嘗試了ulong,小數也沒有超過26-28的數字(N)。 所以我恢復到VB網站上的版本。 http://www.xtremevbtalk.com/showthread.php?s=6548354125cb4f312fc555dd0864853e&t=129902

的代碼,以避免擊中96位天花板的方法,並聲稱自己是能夠計算高達如N 98,K 49 出於某種原因,我不能得到這個行爲,就吐出了一些很奇怪數字。

放棄一段時間後,我決定重新閱讀維基建議。雖然其中大部分都在我的頭上,但我能夠發現計算二項式係數的某些方法具有不準確性。這對於你基本上撥號(轉向)遊戲的系統來說並不合適。經過一番搜索和閱讀我碰到這個: http://dmitrybrant.com/2008/04/29/binomial-coefficients-stirling-numbers-csharp

原來,這正是我正在尋找的信息!第一種方法對於我所做的任何事情都是準確和快速的。非常感謝psychotic去加入只是在這裏張貼的麻煩!

回答

1

確實有780個組合的2個數字可以從一組40中產生。如果您的組合生成器使用從零開始的索引,那麼任何索引> =組合的最大數量將是無效的。 您可以使用binomial coefficient來確定可以形成的組合數量。

+0

@Trinnexx - 修改原來的問題。 –

+0

這篇文章的大部分都在我頭上。在最後的工作中發現了這種方法,但也有浮點不準確。然而,通常尋找二項式係數導致了一篇關於精確計算它們的文章。 http://dmitrybrant.com/2008/04/29/binomial-coefficients-stirling-numbers-csharp 這種組合方法對於主角過去45(N)的歡呼聲。 – Trinnexx

+0

關於您的國旗,請使用與其他賬戶相同的電子郵件,我可以快速合併這兩個賬戶。一旦擁有,請再次舉報。 –