摘要:可以在遍歷所有矩陣時(shí),對(duì)各種出現(xiàn)的次數(shù)進(jìn)行計(jì)數(shù),最后計(jì)數(shù)值為的個(gè)數(shù)即為所求結(jié)果。上一篇排序交換次數(shù)的最少化排序交換次數(shù)的最少化本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解程序員的算法趣題詳細(xì)分析和全解
目錄
?????????當(dāng)n=4時(shí),像上述例子一樣,根據(jù)統(tǒng)計(jì)結(jié)果重新排列O和X的位置,只有一種排列方式的O和X的排列一共有多少種呢?
????????因?yàn)槭菍?duì)O計(jì)數(shù),可以用1代表O,用0代表x,這樣原矩陣就轉(zhuǎn)化為一個(gè)二進(jìn)制矩陣。
????????以下采用暴力搜索法。
????????對(duì)N*N的所有可能的二進(jìn)制矩陣進(jìn)行N行和N列的,所得的2*N個(gè)值形成的排列{r1_sum, r2_sum, …,rN_sum, c1_sum, c2_sum, …, cN_sum }構(gòu)成這個(gè)矩陣的signature。然后查詢值對(duì)應(yīng)唯一的矩陣的signature的個(gè)數(shù)。可以在遍歷所有矩陣時(shí),對(duì)各種signature出現(xiàn)的次數(shù)進(jìn)行計(jì)數(shù),最后計(jì)數(shù)值為1的signature個(gè)數(shù)即為所求結(jié)果。signature出現(xiàn)的次數(shù)可以用哈希表來(lái)存儲(chǔ),在python中就是dict()。
????????N*N的所有可能的二進(jìn)制矩陣種類數(shù)為 , N=4時(shí)為65536,隨著N增大急劇增大。
????????算法流程如下所示:
?
?
# -*- coding: utf-8 -*-"""Created on Wed Sep 29 07:51:03 2021@author: chenxy"""import sysimport timeimport datetimeimport math# import randomfrom typing import List# from queue import Queuefrom collections import dequeimport itertools as itimport numpy as npN = 4sigCount = dict()tStart = time.perf_counter()for node in it.product([0,1],repeat=N**2): a = np.array(node).reshape(N,N) # print(a) col_sum = np.sum(a,axis=0) row_sum = np.sum(a,axis=1) sig = tuple(np.concatenate((col_sum,row_sum))) if sig in sigCount: sigCount[sig] += 1 else: sigCount[sig] = 1count = 0for key in sigCount: if sigCount[key] == 1: count += 1tCost = time.perf_counter() - tStartprint("N = {0}, count={1}, tCost = {2:6.3f}(sec)".format(N,count,tCost))
????????運(yùn)行結(jié)果:N = 4, count=6902, tCost = ?0.891(sec)
????????有兩個(gè)可能改進(jìn)方案:
????????以后回頭來(lái)補(bǔ)上這些改進(jìn)解。
? ? ? ? 上一篇:Q45: 排序交換次數(shù)的最少化? ? ? ??
????????本系列總目錄參見(jiàn):程序員的算法趣題:詳細(xì)分析和Python全解
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/121664.html
摘要:能以最少交換次數(shù)到達(dá)升序有序排列記為的數(shù)列記為就等價(jià)于從代表的節(jié)點(diǎn)在這張圖中到達(dá)對(duì)應(yīng)的節(jié)點(diǎn)的最短路徑長(zhǎng)度。上一篇質(zhì)數(shù)矩陣質(zhì)數(shù)矩陣下一篇唯一的序列本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問(wèn)題描述 2. 解題分析 3. 代碼及測(cè)試 4. 后記 ...
摘要:漢明距離可以用異或操作實(shí)現(xiàn)。這個(gè)問(wèn)題其實(shí)可以看作是,具有個(gè)節(jié)點(diǎn)的全連接無(wú)向圖,每條邊的權(quán)重值代表兩個(gè)節(jié)點(diǎn)所代表的數(shù)字的段碼顯示的二進(jìn)制表示之間的漢明距離。 目錄 1. 問(wèn)題描述 2. 解題分析 3. 代碼及測(cè)試 1. 問(wèn)題描述 ????????問(wèn)題:求把10個(gè)數(shù)字全部顯示出來(lái)時(shí),亮燈/滅...
摘要:基于以上討論可得,本題求解流程如下所示代碼及測(cè)試運(yùn)行結(jié)果上一篇水果酥餅日下一篇異或楊輝三角形本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問(wèn)題描述 2. 解題分析 3. 代碼及測(cè)試 1. 問(wèn)題描述 ????????六度空間理論非常有名。大概的意思是1個(gè)人只需要通過(guò)6個(gè)中間人就...
摘要:但是由于不能使用作為,所以將表示狀態(tài)的列表轉(zhuǎn)換為后再用作的。上一篇將牌洗為逆序下一篇糖果惡作劇本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問(wèn)題描述 2. 解題分析 2.1?節(jié)點(diǎn)狀態(tài)表示 ???????2.2?鄰節(jié)點(diǎn)搜索 ???????2.3?路徑歷史記憶以及判斷鄰節(jié)點(diǎn)是否在...
摘要:中的統(tǒng)一的終點(diǎn)是全白狀態(tài)。比如說(shuō),的第個(gè)數(shù)恰好是,它可以由根據(jù)題設(shè)規(guī)則重排而得。上一篇填充白色填充白色下一篇優(yōu)雅的地址本系列總目錄參見(jiàn)程序員的算法趣題詳細(xì)分析和全解程序員的算法趣題詳細(xì)分析和全解 目錄 1. 問(wèn)題描述 2. 解題分析 2.1??Naive Approach--正向全量搜索 ...
閱讀 2226·2021-09-30 09:47
閱讀 989·2021-08-27 13:01
閱讀 2972·2019-08-30 15:54
閱讀 3695·2019-08-30 15:53
閱讀 836·2019-08-29 14:07
閱讀 726·2019-08-28 18:16
閱讀 813·2019-08-26 18:37
閱讀 1420·2019-08-26 13:27