国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

程序員的算法趣題Q46: 唯一的OX序列

y1chuan / 2208人閱讀

摘要:可以在遍歷所有矩陣時,對各種出現(xiàn)的次數進行計數,最后計數值為的個數即為所求結果。上一篇排序交換次數的最少化排序交換次數的最少化本系列總目錄參見程序員的算法趣題詳細分析和全解程序員的算法趣題詳細分析和全解

目錄

1. 問題描述

2. 解題分析

3. 代碼及測試

4. 后記


1. 問題描述

?????????當n=4時,像上述例子一樣,根據統(tǒng)計結果重新排列O和X的位置,只有一種排列方式的O和X的排列一共有多少種呢?

2. 解題分析

????????因為是對O計數,可以用1代表O,用0代表x,這樣原矩陣就轉化為一個二進制矩陣。

????????以下采用暴力搜索法。

????????對N*N的所有可能的二進制矩陣進行N行和N列的,所得的2*N個值形成的排列{r1_sum, r2_sum, …,rN_sum, c1_sum, c2_sum, …, cN_sum }構成這個矩陣的signature。然后查詢值對應唯一的矩陣的signature的個數??梢栽诒闅v所有矩陣時,對各種signature出現(xiàn)的次數進行計數,最后計數值為1的signature個數即為所求結果。signature出現(xiàn)的次數可以用哈希表來存儲,在python中就是dict()。

????????N*N的所有可能的二進制矩陣種類數為 , N=4時為65536,隨著N增大急劇增大。

????????算法流程如下所示:

?

?

3. 代碼及測試

# -*- 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))   

????????運行結果:N = 4, count=6902, tCost = ?0.891(sec)

4. 后記

????????有兩個可能改進方案:

  1. 用二進制的形式來表示矩陣,以位操作的方式實現(xiàn)行和以及列和計算
  2. 矩陣中任意一個子矩陣的4個頂點按對角線分為兩組,一組為全0、另一組為全1的情況下,很明顯可以構成出和它所對應相同的signature的不同矩陣,因此可以排除在搜索范圍之外

????????以后回頭來補上這些改進解。

? ? ? ? 上一篇:Q45: 排序交換次數的最少化? ? ? ??

????????本系列總目錄參見:程序員的算法趣題:詳細分析和Python全解

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121664.html

相關文章

  • 序員算法趣題Q45: 排序交換次數最少化

    摘要:能以最少交換次數到達升序有序排列記為的數列記為就等價于從代表的節(jié)點在這張圖中到達對應的節(jié)點的最短路徑長度。上一篇質數矩陣質數矩陣下一篇唯一的序列本系列總目錄參見程序員的算法趣題詳細分析和全解程序員的算法趣題詳細分析和全解 目錄 1. 問題描述 2. 解題分析 3. 代碼及測試 4. 后記 ...

    flybywind 評論0 收藏0
  • 序員算法趣題Q37: 翻轉7段碼(1)

    摘要:漢明距離可以用異或操作實現(xiàn)。這個問題其實可以看作是,具有個節(jié)點的全連接無向圖,每條邊的權重值代表兩個節(jié)點所代表的數字的段碼顯示的二進制表示之間的漢明距離。 目錄 1. 問題描述 2. 解題分析 3. 代碼及測試 1. 問題描述 ????????問題:求把10個數字全部顯示出來時,亮燈/滅...

    RdouTyping 評論0 收藏0
  • 序員算法趣題Q19: 朋友朋友還是朋友嗎?

    摘要:基于以上討論可得,本題求解流程如下所示代碼及測試運行結果上一篇水果酥餅日下一篇異或楊輝三角形本系列總目錄參見程序員的算法趣題詳細分析和全解 目錄 1. 問題描述 2. 解題分析 3. 代碼及測試 1. 問題描述 ????????六度空間理論非常有名。大概的意思是1個人只需要通過6個中間人就...

    oogh 評論0 收藏0
  • 序員算法趣題Q43: 讓玻璃杯水量減半

    摘要:但是由于不能使用作為,所以將表示狀態(tài)的列表轉換為后再用作的。上一篇將牌洗為逆序下一篇糖果惡作劇本系列總目錄參見程序員的算法趣題詳細分析和全解 目錄 1. 問題描述 2. 解題分析 2.1?節(jié)點狀態(tài)表示 ???????2.2?鄰節(jié)點搜索 ???????2.3?路徑歷史記憶以及判斷鄰節(jié)點是否在...

    chenjiang3 評論0 收藏0
  • 序員算法趣題Q39: 反復排序

    摘要:中的統(tǒng)一的終點是全白狀態(tài)。比如說,的第個數恰好是,它可以由根據題設規(guī)則重排而得。上一篇填充白色填充白色下一篇優(yōu)雅的地址本系列總目錄參見程序員的算法趣題詳細分析和全解程序員的算法趣題詳細分析和全解 目錄 1. 問題描述 2. 解題分析 2.1??Naive Approach--正向全量搜索 ...

    gitmilk 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<