日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

753 Cracking the Safe

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 753 Cracking the Safe 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法一 Hierholzer’s Algorithm
相關概念:
1 歐拉路徑:在無向圖中,每個邊只經過一次,形成的路徑。在有向圖中,是指每條有向邊只使用一次,形成的路徑。
2 歐拉回路:歐拉路徑是一個環。
3 在無向圖中,存在歐拉路徑的條件是:每個頂點的邊是偶數。或者圖中有兩個是奇數條邊的頂點。
4 在圖中找歐拉回路的算法Hierholzer’s Algorithm。算法描述是:選擇開始頂點v,沿著頂點v的邊一直訪問直到訪問到頂點v。這個訪問是不可能卡在其他節點停止的,因為圖中所有節點的邊是偶數。從一個頂點進去,就要從一個頂點出來,直到頂點v。這個路徑是一個歐拉回路,但可能沒有覆蓋了圖中所有的邊。在前面一個路徑中如果存在節點u,u有鄰邊還沒有訪問,從頂點u繼續訪問得到一個歐拉回路,將該回路接到上之前訪問的路徑后,得到新的訪問路徑。直到所有頂點的邊都訪問完,得到完整的歐拉回路。
這里注意:新的路徑接到前面的路徑不是簡單的放在后面,而是可能插在中間的。具體細節查看《數據結構與算法分析Java語言描述》第2版的第266,267頁。

翻譯到這都題目是這樣的。所有答案的組合數是k^n。那么我們把前n-1個字符串看做是節點,最后一個字符是邊。例如n=2,k=2,所有可能的組合是00,01,10,11。那么可以把0,1看做節點。0節點有兩條邊,分別為0,1,得到組合00,01。

歐拉回路是:從節點0開始,0,1,1,0;
最后答案將節點0補上 :00110。參考官網解決方案一中提出了post-order概念。
自己的思想:用map構建圖,實現Hierholzer’s算法。

DFS
想法:為了符合要求,最后返回的字符串answer應該包含所有可能的組合。可能的組合數應該是k^n。為了讓answer最短,直覺上應該是使得answer的最后n-1個字符可以重用。
例如:n=2,k=2,所有可能的組合是00,01,10,11。answer=(00110)。
DFS的實現是:
目標:找到包含所有組合的最短字符串
創建圖:節點是所有可能的組合,例如:00,01,10,11;邊:如果node1的最后n-1個字符加上[0,k-1]范圍內的任何一個數可以得到node2,則node1和node2之間有條邊。例如 (00)+1=>(01),則00和01之間有條邊。
轉移:對每一個節點,取最后n-1位,如果能夠有邊,成功轉移到另外一個未被訪問的節點,則繼續DFS。退出條件是:所有的組合都訪問完成。
來自網頁
代碼實現:

方法二:Inverse Burrows-Wheeler Transform
1 Lyndon Word:Lyndon word 是一個非空字符串,在字典順序上,比它的所有旋轉都要(嚴格地)小。
Lyndon word的性質:一個Lyndon word 被分為左右兩部分,左邊的字符串在字典順序上嚴格小于右邊的字符串。w=uv,u<vw=uv,u<v。如果v盡可能的長,則將u,v稱為標準分解(standard factorization)
舉例來講,用{0,1}可以組成的Lyndon word 可能有:0,1,01,001,011,0001,0011,0111…
來自wiki
2 de Bruijn sequences
將長度為n的Lyndon word 按字典順序鏈接起來,形成de Bruijn sequences。這個視頻中有講解。


這兩張圖片來源于視頻中。
3 Inverse Burrows-Wheeler Transform
IBWT算法生成可以形成de Bruijn 序列的Lyndon word。

總結

以上是生活随笔為你收集整理的753 Cracking the Safe的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。