簡體   English   中英

查找按字符索引分組的多個字符串的並集的算法

[英]Algorithm to find the union of multiple strings grouped by character index

我一直在嘗試一種高效的方法,該方法可以在按索引分組的一組fixed width字符串中查找字符出現的並集。 像這樣的東西;

s1 = "013965"
s2 = "015935"
s3 = "310012"

結果如下所示,所有數字組都存在於char索引n處的所有字符串中:

out = "[03][1][350][90][631][52]"

我曾想過這樣做的天真的方法:遍歷每個字符串,每個索引,同時將中間字符串存儲在數組中,然后遍歷該數組以構建輸出值。 但是,在我看來,我的方法是一種效率極低的方法,與漸近最優解相距太遠。

如果預先知道所有可能字符的集合,則假設它們的數目為n ,並且n不太高(例如10,如果您僅執行數字操作),則可以通過創建m長度為n布爾數組來做到這一點,其中m是位置數或輸入字符串中的位數, n 如果任何輸入字符串中的第n個字符位於第m個位置,則第m個數組中的第n個位置將為true False將表示以前沒有這樣的字符在第m位。

然后,您可以遍歷每個字符串,當在位置m遇到字符n ,將在第m個數組的第n個位置標記為true 最后,您將擁有m數組,每個數組描述第m個組的內容

pos[0] = {true, true, false, false, false, true, true, false, true, false}
pos[1] = {true, false, false, false, false, false, false, false, false, false}
pos[2] = {false, false, true, true, false, false, false, false, false, true}

轉換為

[0,1,5,6,8] [0] [2,3,9]

由於所有結構都是直接訪問數組,因此不涉及查找,所有訪問都在固定時間內進行,您只需要訪問每個字符一次,而無需進行比較。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM