ในบทความนี้ เราจะพูดถึงการหาคู่ที่มีผลรวมสูงสุดในเมทริกซ์ที่กำหนดหรืออาร์เรย์ 2 มิติ ตัวอย่างเช่น
Input : matrix[m][n] = {
{ 3, 5, 2 },
{ 2, 6, 47 },
{ 1, 64, 66 } }
Output : 130
Explanation : maximum sum is 130 from element pair 64 and 66.
Input : matrix[m][n] = {
{ 55, 22, 46 },
{ 6, 2, 1 },
{ 3, 24, 52 } }
Output : 107
Explanation : maximum sum is 130 from element pair 55 and 52. แนวทางในการหาทางออก
มาดูคำอธิบายสั้น ๆ เกี่ยวกับขั้นตอนต่าง ๆ เพื่อแก้ปัญหาที่กำหนดโดยไม่มีปัญหาใด ๆ
แนวทางกำลังเดรัจฉาน
ใช้วิธี Brute-force ได้ กล่าวคือ เริ่มต้นตัวแปร MAX ด้วยผลรวมของสององค์ประกอบแรก จากนั้นข้ามผ่านอาร์เรย์และการตรวจสอบของทุกคู่ หากมีค่ามากกว่า MAX MAX ของค่าผลรวมใหม่ แต่กระบวนการนี้จะใช้เวลามากขึ้นด้วยความซับซ้อนของเวลาของ O((m*n)2)
แนวทางที่มีประสิทธิภาพ
สามารถใช้แนวทางที่มีประสิทธิภาพได้ เช่น เริ่มต้น MAX1 และ MAX2 แบบสองตัวแปรด้วย 0 จากนั้นจึงข้ามผ่านอาร์เรย์ 2 มิติ ตรวจสอบว่าองค์ประกอบปัจจุบันมีความสำคัญมากกว่า MAX1 หรือไม่ ถ้าใช่ ให้แทนที่ MAX2 ด้วย MAX1 และ MAX1 ด้วยชิ้นส่วนที่มีอยู่ ด้วยวิธีนี้ เราจะสามารถหาจำนวนสูงสุดสองตัว และแน่นอน ผลรวมของจำนวนเต็มสองตัวจะเป็นจำนวนสูงสุด
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int main() {
int m = 3, n = 3;
// initialising matrix with values
int matrix[m][n] = {
{ 55, 22, 46 },
{ 6, 2, 1 },
{ 3, 24, 52 }
};
// initialising MAX1 and MAX2 to keep two maximum numbers.
int MAX1 = INT_MIN;
int MAX2 = INT_MIN;
int result;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// check if the element is greater than MAX1.
if (matrix[i][j] > MAX1) {
MAX2 = MAX1;
MAX1 = matrix[i][j];
}
// check if the current element is between MAX1 and MAX2.
else if (matrix[i][j] > MAX2 && matrix[i][j] <= MAX1) {
MAX2 = matrix[i][j];
}
}
}
// calculating maximum sum by adding both maximum numbers.
result = MAX1 + MAX2;
cout << "maximum sum in Matrix : " << result ;
return 0;
} ผลลัพธ์
maximum sum in Matrix : 107
คำอธิบายของโค้ดด้านบน
- การจัดเก็บองค์ประกอบในอาร์เรย์ 2 มิติและการเริ่มต้น MAX1 และ MAX2 ด้วยค่าต่ำสุดของ INT
- การข้ามผ่านเมทริกซ์
- หากส่วนปัจจุบันสำคัญกว่า MAX1 ให้แทนที่ MAX2 ด้วย MAX1 และ MAX1 ด้วยองค์ประกอบปัจจุบัน
- หากชิ้นส่วนปัจจุบันมีขนาดเล็กกว่า MAX1 และมีความหมายมากกว่า MAX2 ให้แทนที่ MAX2 ด้วยองค์ประกอบปัจจุบัน
- คำนวณผลลัพธ์โดยบวก MAX1 และ MAX2 สองตัวแล้วพิมพ์งาน
บทสรุป
ในบทความนี้ เราได้พูดถึงการหาคู่ที่มีผลรวมสูงสุดในเมทริกซ์ที่กำหนด เราได้พูดคุยถึงแนวทางในการค้นหาวิธีแก้ปัญหาและยังได้กล่าวถึงโค้ด C++ ในลักษณะเดียวกัน เราสามารถเขียนโค้ดนี้ในภาษาอื่นๆ เช่น Java, C, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์