ในปัญหานี้ เราจะมาทำความเข้าใจเกี่ยวกับการแปลงอาร์เรย์ 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