免費開始練習
moea_joint_essay 109年 [統計資訊] 資料庫及資料探勘、程式設計

第 二 題

📖 題組:
給定一陣列名稱為 NUM,包含 n 個不重複整數(n > 2),請撰寫虛擬程式碼找出該陣列中元素兩兩乘積最大者(即 Maximum pairwise product,變數名稱為 maxprod,maxprod = maximum (NUM[i] * NUM[j], i <> j) ),完成下列 2 項子題。(共 2 題,共 25 分)
📝 此題為申論題,共 2 小題

小題 (二)

請在演算法時間複雜度須為 O(n)的限制下,撰寫虛擬程式碼。(請注意,如作答內容之演算法時間複雜度經分析為 O(n²),本子題僅給 5 分)(15 分)

思路引導 VIP

利用 O(n) 的一次遍歷,逐步比對更新 max1, max2, min1, min2。

🤖
AI 詳解
AI 專屬家教
// 初始設定極值(假設負無限大為極小,正無限大為極大)
max1 = -∞, max2 = -∞

小題 (一)

請說明欲撰寫之虛擬程式碼的主要程式邏輯。(10 分)

思路引導 VIP

說明為何不能只找兩個最大正數,必須考慮到兩負數相乘可能產生更大的正值。因此演算法邏輯是掃描一次陣列,記錄最大與次大值、最小與次小值,然後返回二者相乘的較大者。

🤖
AI 詳解
AI 專屬家教

由於陣列中可能包含負數,而「兩個負數相乘可能會得到極大的正數」,因此尋找任意兩個元素相乘之最大值時,最大乘積必然發生在下列兩種情況之一:

  1. 陣列中最大的兩個正數相乘。
  2. 陣列中最小的兩個負數(即負最多、絕對值最大的兩個負數)相乘。

🏷️ 相關主題

程式設計演算法與資料結構實作
查看更多「[統計資訊] 資料庫及資料探勘、程式設計」的主題分類考古題