บทนำ
การหมุนอาเรย์สองมิติ หรือที่เรียกว่ามาทริกซ์ เป็นปัญหาที่เกิดขึ้นบ่อยในโปรแกรมมิ่ง ซึ่งสามารถเกิดขึ้นในแอพพลิเคชันต่างๆ โดยเฉพาะในกราฟิกคอมพิวเตอร์และการจัดการข้อมูล ในบล็อกโพสต์นี้ เราจะไปลึกถึงกระบวนการการหมุน มาทริกซ์ 4x4 ด้วยมุม 90 องศา ตามเข็มนาฬิกา
ความเข้าใจเกี่ยวกับปัญหา
จินตนาการว่าคุณมีอาเรย์สองมิติที่มีโครงสร้างแบบนี้:
[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]
หลังจากหมุนมาทริกซ์นี้ 90 องศาตามเข็มนาฬิกา มันควรจะแปลงเป็น:
[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]
ในแง่ปฏิบัติ แต่ละองค์ประกอบในอาเรย์เดิมจะเลื่อนไปอยู่ในตำแหน่งใหม่ตามการหมุน แต่วิธีการที่เราจะนำไปใช้ในภาษาโปรแกรมอย่าง C# คืออะไร? มาทำให้เห็นภาพกันทีละขั้นตอน
โซลูชัน
ขั้นตอนที่ 1: เริ่มต้นมาทริกซ์
ก่อนอื่น เราจำเป็นต้องเริ่มต้นมาทริกซ์ในโปรแกรมของเรา นี่คือวิธีที่คุณสามารถทำได้:
int[,] array = new int[4,4] {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,0,1,2 },
{ 3,4,5,6 }
};
ขั้นตอนที่ 2: สร้างฟังก์ชันสำหรับหมุนมาทริกซ์
ถัดไป เราจะสร้างฟังก์ชันที่เรียกว่า RotateMatrix
ซึ่งทำการหมุนที่ต้องการ ฟังก์ชันนี้จะรับมาทริกซ์เดิมและขนาดเป็นพารามิเตอร์ และคืนค่ามาทริกซ์ที่ถูกหมุนแล้ว
นี่คือการนำไปใช้ฟังก์ชัน RotateMatrix
:
static int[,] RotateMatrix(int[,] matrix, int n) {
int[,] ret = new int[n, n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
ret[i, j] = matrix[n - j - 1, i];
}
}
return ret;
}
ขั้นตอนที่ 3: การอธิบายฟังก์ชัน
- การประกาศมาทริกซ์: เราประกาศมาทริกซ์ใหม่
ret
ขนาดเดียวกับข้อมูลนำเข้า - ลูปซ้อน: เราใช้ลูปซ้อนเพื่อสแกนแต่ละองค์ประกอบของมาทริกซ์
- ตรรกะการหมุน: สำหรับแต่ละองค์ประกอบที่ตำแหน่ง
(i, j)
เราจะแมพมันไปยังตำแหน่งใหม่(j, n - i - 1)
สูตรนี้ช่วยในการหมุนองค์ประกอบให้ถูกต้องโดย 90 องศาตามเข็มนาฬิกา
ขั้นตอนที่ 4: ทดสอบฟังก์ชัน
คุณสามารถทดสอบฟังก์ชันโดยการเรียกใช้งานและพิมพ์มาทริกซ์ที่ถูกหมุน:
int[,] rotated = RotateMatrix(array, 4);
เพียงแค่แน่ใจว่ามีการจัดทำฟังก์ชันสำหรับการพิมพ์มาทริกซ์เพื่อตรวจสอบ
สรุป
การหมุนอาเรย์สองมิติเป็นงานที่ตรงไปตรงมาหลังจากที่คุณเข้าใจการแมพดัชนี ขณะที่วิธีการปัจจุบันมีความซับซ้อนเวลาทำงาน O(n^2) การเพิ่มประสิทธิภาพอัลกอริธึมสำหรับมาทริกซ์ที่ใหญ่ขึ้น (เช่น 10000x10000) เป็นหัวข้อที่กำลังถกเถียงกันในอัลกอริธึมและโครงสร้างข้อมูล
ตอนนี้คุณสามารถหมุนอาเรย์สองมิติใดๆ ใน C# ได้อย่างมั่นใจ มีความสุขในการเขียนโค้ด!