在資料比對與訊號分析中,常會遇到這樣的情況:
一段資料 A 很長,而另一段資料 B 較短;
我們希望從 A 當中找到一段與 B「最相似」的連續片段。
然而,資料之間可能會有微小差異,因此「完全一樣」並不是常態。
我們需要一種方式衡量兩段資料的相似程度。
在這個問題中,我們定義兩個等長陣列的相似度為:
相異度 = Σ |A[i] − B[i]|
(越小 → 越相似)
現在,給你兩個陣列:
第一個陣列 A(較長)
第二個陣列 B(較短)
請你找出 A 中一段 長度與 B 相同的連續子陣列,
使其與 B 的「相異度」最小,並輸出這段子陣列。
輸入為兩行:
第一行:陣列 A(數字之間以空白分隔)
第二行:陣列 B(M ≤ A 的長度)
輸出 A 中與 B 最相似的那段 連續子陣列,
長度需與 B 完全相同。
輸出格式為 M 個整數,以空白分隔。
你需要完成以下任務:
從陣列 A 中找所有長度與 B 相同的連續子陣列。
對於每一段,計算:
Σ |A[i+j] - B[j]|
找出相異度最小的那一段並輸出。
若有多段相異度相同,輸出最前面的那一段。
3 8 2 9 7 1 5 6 4 10 4 9 6 8
2 9 7 1
使用「滑動視窗」即可依序比較所有長度 M 的子陣列。
每一段使用迴圈計算 Σ |A[i] − B[i]|。
若有多段相異度相同,取第一段。
陣列長度不會超出合理範圍,本題不需要進階優化。
| ID | User | Problem | Subject | Hit | Post Date |
沒有發現任何「解題報告」 |
|||||