我想寫一個Python腳本,以確定是否給定的nonogram是獨一無二的。我目前的劇本跑得太長,所以我想知道是否有人有任何想法。Python的nonogram獨特
據我瞭解,一般nonogram問題是NP難問題。然而,我知道兩條關於我的給定非圖形的信息:
- 當分別將黑/白框分別表示爲0和1時,我知道每個圖像有多少個。
- 我只考慮6x6 nonograms。
我最初使用蠻力的方法(所以2 ^36案件)。然而,知道了(1),我能夠將其縮小到n選k(36個選擇數爲零)的情況。但是,當k接近18時,這仍然是〜2^33個案例。需要幾天運行。
任何想法,我怎麼可能會加速這個嗎?它甚至有可能嗎?
同樣,我不關心解決辦法是什麼 - 我已經擁有它。我試圖確定的是,如果解決方案是獨一無二的。
編輯: 這是不完全的完整代碼,但有總體思路:
def unique(nonogram):
found = 0
# create all combinations with the same number of 1s and 0s as incoming nonogram
for entry in itertools.combinations(range(len(nonogram)), nonogram.count(1)):
blank = [0]*len(nonogram) # initialize blank nonogram
for element in entry:
blank[element] = 1 # distribute 1s across nonogram
rows = find_rows(blank) # create row headers (like '2 1')
cols = find_cols(blank)
if rows == nonogram_rows and cols == nonogram_cols:
found += 1 # row and col headers same as original nonogram
if found > 1:
break # obviously not unique
if found == 1:
print('Unique nonogram')
什麼是你當前的腳本是什麼樣子? – squiguy
Nonogram的定義是不是暗示你總是有0和1的編碼數?總和所有行值(或所有列值)以獲得計數。 – Koterpillar
Koterpillar - 我有數。我想知道是否有其他非圖表生成相同的計數。 –