我正在研究涉及棋盤遊戲Quarto的組合問題的編程解決方案。在Quarto中有十六件,每件都有四個二元屬性。這意味着我們可以將每個元素表示爲一個元組(i,j,k,l),其中每個元素爲零或一個元素。爲了解決我的問題,我需要重複每種獨特的方式,以便在4x4的棋盤上安排全部棋子。我可以做類似Python迭代器Quarto遊戲板的獨特安排
from itertools import permutations
for board_orientation in permutations(pieces, 16):
do_stuff(board_orientation) #takes 1 or 2 full seconds
但是這將意味着16! (超過20萬億次)迭代。爲了避免這種情況,我試圖創建一個只產生獨特板面方向的發生器 - 即在一個或多個屬性(前兩個屬性由二面角組D4描述)的旋轉,反射和反轉下具有唯一性的方向。我發現了Tic-Tac-Toe的一個類似問題,但我在如何將它擴展到這個更復雜的迭代問題上掙扎。
我認爲解決方案涉及通過散列樹將每個板子方向映射到數值,然後看看數字在各種對稱操作下如何變化,但努力將其轉換爲代碼。