ในปัญหานี้ เราจะมาทำความเข้าใจเกี่ยวกับการแปลงอาร์เรย์ 2 มิติเป็นอาร์เรย์ 1 มิติ เราจะมาดูวิธีการจัดเก็บองค์ประกอบของอาร์เรย์ 2 มิติไปยังอาร์เรย์ 1 มิติ
ในที่นี้ ขนาดของอาร์เรย์ 1-D จะเท่ากับจำนวนองค์ประกอบทั้งหมดในอาร์เรย์ 2 มิติซึ่งเท่ากับ n*m
ในการเขียนโปรแกรม มีสองวิธีในการจัดเก็บอาร์เรย์ 2 มิติไปยังอาร์เรย์ 1 มิติ พวกเขาคือ−
- วิชาเอก
- สาขาวิชาคอลัมน์
วิชาเอก: ในแถวหลัก องค์ประกอบทั้งหมดของแถวจะถูกเก็บไว้ด้วยกันจากนั้นจะย้ายไปที่แถวถัดไป
หากองค์ประกอบของอาร์เรย์ 2 มิติขนาด nXm มีดัชนี (i, j) อยู่ในอาร์เรย์ 1 มิติ ดัชนีของอาร์เรย์ 1 มิติจะเป็น
(j) + (i)*m
สาขาวิชา: ในคอลัมน์หลัก องค์ประกอบทั้งหมดของคอลัมน์จะถูกเก็บไว้ด้วยกัน จากนั้นจึงข้ามคอลัมน์ถัดไป
หากองค์ประกอบของอาร์เรย์ 2 มิติขนาด nXm มีดัชนี (i, j) อยู่ในอาร์เรย์ 1 มิติ ดัชนีของอาร์เรย์ 1 มิติจะเป็น
(i) + (j)*n
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหา
ป้อนข้อมูล: n =3, m =5, (i,j) =(0, 2)
ผลลัพธ์: แถวหลัก =
คอลัมน์หลัก =
คำอธิบาย:
แถวหลัก =2 + 0*3 =3
Col-major =0 + 2*5 =10
โปรแกรมแสดงการแปลงภาพ 2 มิติเป็น 1 มิติ
ตัวอย่าง
#include<iostream> using namespace std; int main() { int n = 3; int m = 5; int grid[n][m] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}}; int i = 0; int j = 2; int rowMajorIndex = i*n + j; cout<<"Index of element at index (0, 2) in 1-D array using row-major is "<<rowMajorIndex<<endl; int colMajorIndex = i + j*m; cout<<"Index of element at index (0, 2) in 1-D array using column-major is "<<colMajorIndex<<endl; return 0; }
ผลลัพธ์ -
Index of element at index (0, 2) in 1-D array using row-major is 2 Index of element at index (0, 2) in 1-D array using column-major is 10