c181. 最相似子列(Minimal Similar Subarray)
Tags :
Accepted rate : 0人/0人 (0%) [非即時]
評分方式:
Special

最近更新 : 2025-11-14 11:54

Content

在資料比對與訊號分析中,常會遇到這樣的情況:
一段資料 A 很長,而另一段資料 B 較短;
我們希望從 A 當中找到一段與 B「最相似」的連續片段。

然而,資料之間可能會有微小差異,因此「完全一樣」並不是常態。
我們需要一種方式衡量兩段資料的相似程度。

在這個問題中,我們定義兩個等長陣列的相似度為:

相異度 = Σ |A[i] − B[i]|
(越小 → 越相似)

現在,給你兩個陣列:

  • 第一個陣列 A(較長)

  • 第二個陣列 B(較短)

請你找出 A 中一段 長度與 B 相同的連續子陣列
使其與 B 的「相異度」最小,並輸出這段子陣列。

 

Input

輸入為兩行:

  • 第一行:陣列 A(數字之間以空白分隔)

  • 第二行:陣列 B(M ≤ A 的長度)

Output

輸出 A 中與 B 最相似的那段 連續子陣列
長度需與 B 完全相同。
輸出格式為 M 個整數,以空白分隔。

你需要完成以下任務:

  1. 從陣列 A 中找所有長度與 B 相同的連續子陣列。

  2. 對於每一段,計算:

     
    Σ |A[i+j] - B[j]|
  3. 找出相異度最小的那一段並輸出。

  4. 若有多段相異度相同,輸出最前面的那一段。

Sample Input #1
3 8 2 9 7 1 5 6 4 10
4 9 6 8
Sample Output #1
2 9 7 1
測資資訊:
記憶體限制: 64 MB
公開 測資點#0 (100%): 1.0s , <1K
Hint :
  • 使用「滑動視窗」即可依序比較所有長度 M 的子陣列。

  • 每一段使用迴圈計算 Σ |A[i] − B[i]|。

  • 若有多段相異度相同,取第一段。

  • 陣列長度不會超出合理範圍,本題不需要進階優化。

Tags:
出處:
2025雲嘉南資訊學科能力第六題 [管理者: stu310102(Heavenly Shogun) ]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」