面試題 怎樣快速找出兩兩相似的陣列?

時間 2021-05-31 22:43:27

1樓:

我的想法是

1, 建立乙個字典(記錄其中兩兩陣列相同元素個數,假設) 從1-1到1-2000萬,2-1到2000萬,……最後19999999-2000萬。

2, 依次判斷兩兩陣列相同元素的個數(倆個陣列對應下標的元素),然後記錄在字典中 (判斷相同 value增1)

3, 字典中值大於80%(值/陣列長度的比值)的兩陣列即為所求陣列

2樓:youthanasia

首先定性,這個是個比較簡單的聚類問題

可以把每個陣列理解成乙個100維以上的變數,每個變數之間的距離就是對應下標不同的數量之和

可以通過各種聚類的演算法,算出這2000萬個樣本點能夠聚成多少個我們接受大小的團

聚類演算法就很多了,隨便說個最簡單的,比如k-means

3樓:cloud erow

既然沒提空間複雜度,我就當作記憶體無限來做了。

陣列長N,匹配長度L,誤差個數為K。(如果L為5,相識度為80%,那K就是1)

掃瞄陣列A生成乙個巨大的,產生所有可能匹配的項。時間複雜度O(N),空間複雜度O((N-L+1)*C(K,L))。C是排列組合。

比如,A中的前5個能夠被(*,a1,a2,a3,a4),(a0,*,a2,a3,a4)...這5個匹配。

用以上的匹配陣列生成自動機。上面的陣列用或連線變成乙個正規表示式。好像時間複雜度是O((N-L+1)*C(K,L)*L).

然後用這個自動機去匹配B就好了。O(L*N)。好像還能優化。

因此複雜度大概就是O(N*L^3)。

4樓:preideas

演算法:使用cosin演算法來計算相似度

原理:具體就是將每個陣列看做乙個向量(如果素組等長,則直接作為向量;不等長,則短陣列全部補齊到最長陣列補的位為0),這樣就可以通過計算夾角來判斷相似度

做法:1.這樣每次可以找出與當前陣列相似的所有陣列;

2.下次先從2000萬里剔除以挑出的陣列;

3.在剩下的陣列的重複步驟1,2

5樓:

可以嘗試這麼做:

1、將所有元素求N次方和(N大於0)

2、根據和的值對陣列進行排序

懶人法3.1、相鄰兩個陣列分為一組

非懶人法

3.2.1、將兩兩陣列的和做減法,取差的絕對值3.

2.2、將差的值不大於M(M大於等於0,建議第一次運算取0,以後運算取差的中位數或者三分位)的陣列分為一組,如果在有三組或以上,縮小M的值,對該小段陣列繼續進行3.2.

2操作,如果M==0,隨機兩兩分成一組,餘下的返回到未兩兩分組的序列裡

3.2.3、對餘下未分組的陣列,重複從3.2.1開始運算,指導餘下陣列數不大於1

舉例:取N=1

a1={2,3,4}

a2={1,3,5}

a3={2,4,3}

a4={3,4,5}

排序a2={1,3,5}

a1={2,3,4}

a3={2,4,3}

a4={3,4,5}

懶人結果:{a2,a1},{a3,a4}誤差較大非懶人結果{a1,a3},{a2,a4}誤差較小

6樓:

如果元素的值範圍是常量k的話可以轉換緯度,時間換空間:轉換成k個長度為2000w的陣列,陣列的元素為有或無。取這些陣列的排列C(k*0.8,k)即可

7樓:朱涵俊

可以用80%的元素建立索引。

比如陣列長度為5,有1,2,3,4,5這組資料。分別用1234,2345,1235,1245,1345建立索引。建立索引時候要先排序。

假設有另外的乙個陣列,23456,有乙個索引是2345,跟上面的乙個索引匹配,就判定相同。

有人說提議是元素下標對應相同才是相同,只需要索引時按照下標索引即可,不需要排序了,上面舉例的12345改成下標12345對應的元素即可(下標從1開始)

8樓:那把殺豬刀

計算相似度

由於陣列等長,每乙個陣列可以理解為乙個向量,問題簡化為2000w個向量計算相似度

2000w的資料規模還是很大,考慮分段降低規模首先計算平均數,得到平均陣列的向量

然後計算每乙個向量到平均數向量的距離,然後通過距離來分段計算

9樓:Norlan

按行來看,陣列數量有很多很多,但按列來看,陣列實際上就N個(N為陣列長度),等價條件是80%的對應元素相等,也就是說20%的對應元素不想等,每次抽取20%的列,列內進行比較,這樣的組合就有(N,N*20%)種,列內進行比較,記錄符合條件的行,最後得到結果,當然,抽取過程有很大的優化空間

10樓:Xi Yang

這個問題很像生物資訊學分析的問題,特別是對環境菌群的marker基因進行高通量測序之後的分析工作。「倆個陣列對應元素有百分之八十以上相等即可」這句話,簡直讓我直接想到了「OTU聚類相似性閾值為80%」。

實際的資料分析情景裡,有很多允許引入誤差的簡化姿勢,以大幅度減少計算量。比如:

以聚類代替所有個體的兩兩相等比較,

以抽樣比較代替全體比較,

兩兩比較的時候,以K子串成分代替序列本身。

11樓:

設每個陣列的長度為N,為避免小數,N應為5的倍數,設 m=N/5

以 4為步長,為陣列中從 0到N-4 為起點的子串計算 hash ,共 (N-4)個hash串。將hash串排序。

判斷兩個陣列相等的條件是:兩個陣列分別算出來的hash串中,至少有m個串相同

怎樣評價今年北大自主招生面試題?

咔咔咔66 總體來看,人文社科的題目為主,理科題目少。1.注重思辨性,信言不美,美言不信。科舉制度是中國古代第五大發明,也有人認為科舉制度阻礙了中國的發展。答題時,要從兩方面來答題 2.注重深度和廣度,發展 創新 禮節 自然界 法律,涉獵範圍廣3.和其他高校的面試相比,難度係數高,五顆星的難度啦不過...

做了乙份前端面試題,有兩道沒寫出標準答案 ?

blank 最後一道題產生乙個方法 接受乙個陣列組 把每個數分成陣列 從第一位開始比較 如果產生前面相同單長度不同的,將長陣列的下一位與所有未排序陣列的第一位比較 大的輸出,然後去掉這個陣列 將剩下的陣列繼續用該方法呼叫 王德福 第一題,你們讀一下題!兩萬不是二萬,這裡還要改寫!var unit 十...

組織乙個十人活動,兩兩都能見面交談,怎樣安排才最有效?

大灰灰老師 class Arrangement object def init self players if len players 2 self players players NOBODY else self players players copy self.n len self playe...