我正在開發一個麻將紙牌求解器,到目前爲止,我做得很好。然而, 它不是我想要的那麼快,所以我要求任何額外的優化 技術你們可能知道。麻將紙牌求解器算法,需要加速
所有的瓷磚都從佈局中知道,但解決方案不是。目前,我有幾個規則可以保證安全移除某些相同瓷磚對(這不能成爲可能的解決方案的障礙)。
爲了清楚起見,當瓷磚隨時可以被揀選並且瓷磚鬆散時瓷磚是免費的,而瓷磚根本不會綁定任何其他瓷磚。
- 如果有四個免費的免費磁貼可用,立即刪除它們。
- 如果有三塊瓷磚可以被撿起,而且至少其中一塊瓷磚是鬆散的瓷磚,請將其取下。
- 如果有三塊瓷磚可以撿起並且只有一塊免費瓷磚(兩塊瓷磚鬆動),請移除空閒的瓷磚和一塊隨機的瓷磚。
- 如果有三個可用的鬆動瓷磚,請將其中的兩個去掉(不要緊)哪一個。
- 由於有四次完全相同的圖塊,如果剩下兩個圖塊,請刪除它們,因爲它們是唯一剩下的圖塊。
我的算法遞歸搜索多線程的解決方案。一旦一個分支完成(到一個沒有更多移動的位置)並且它不會導致解決方案,它會將該位置放在一個包含壞分支的向量中。現在,每次啓動一個新分支時,它都會通過不良位置進行迭代檢查,如果該特定位置已經被檢查過。
該過程一直持續到找到解決方案或正在檢查所有可能的位置。
這很適合包含36或72瓦的佈局。但是當更多的時候,由於需要搜索大量的頭寸,這個算法變得非常無用。所以,我再問你一次,如果你們有什麼好的想法,如何實施更多的安全瓷磚移除規則或任何其他特定的加速算法。
非常問候, nhaa123
這聽起來像你生成瓷磚移除的所有可能的序列,並排除那些導致解決方案。這肯定會很慢。 – sharptooth 2009-05-27 08:01:19
使用正確名稱的麻將紙牌而不是「麻將」+1。 – 2009-05-27 08:45:43