cuốn sách gpt4 ai đã làm

Thuật toán chuyển đổi mảng nhiều chiều thành mảng một chiều

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 02:20:20 26 4
mua khóa gpt4 Nike

Chuyển đổi mảng 2D thành mảng 1D dễ dàng, nhưng làm thế nào để chuyển mảng nhiều chiều có nhiều hơn 2 chiều thành mảng 1D? Ví dụ: giả sử tôi có int [5] [5] [5] x và int [125] y và tôi muốn đặt giá trị của x [3] [4] [2] vào đúng vị trí của y?

Hy vọng điều này có ý nghĩa.

câu trả lời hay nhất

Đã có một số câu trả lời tốt về mặt kỹ thuật ở đây, nhưng đây là cách hiểu trực quan hơn ...


Được rồi, vậy là bạn đã biết cách chuyển từ trường hợp một chiều sang trường hợp hai chiều.

Mảng một chiều trông như thế này:

int [5] :

+------+-----+-----+------+------+
| 0 | 1 | 2 |
|
+------+-----+-----+------+------+

Mảng hai chiều trông như thế này:

int [5][5] :

+------+-----+-----+------+------+
| 0,0 | 0,1 |
|
+------+-----+-----+------+------+
| 1,0 | 1,1 |
|
+------+-----+-----+------+------+
| 2,0 | 2,1 |
|
+------+-----+-----+------+------+
| 3,0 | 3,1 |
|
+------+-----+-----+------+------+
| 4,0 | 4,1 |
|
+------+-----+-----+------+------+

BạnCó thểHãy tưởng tượng việc chuyển đổi sang mảng một chiều tương ứng như thế này:

+------+-----+-----+------+------+------+------+------+- ----+------+- - -
| 0,0 | 0,2 | 0,3 | 1,0 | 1,2 |
|
+------+-----+-----+------+------+------+------+------+- ----+------+- - -
vvv
+------+-----+-----+------+------+------+------+------+- ----+------+- - -
| 0 | 1 | 2 | 3 |
|
+------+-----+-----+------+------+------+------+------+- ----+------+- - -

Nhưng một cách khác để nghĩ về nó là vẽ mảng ban đầu nhưng được gắn nhãn lại - như thế này:

int [5][5] :

+------+-----+-----+------+------+ +------+------+------+ ------+------+
| 0,0 | 0,2 | 0,4 |
|
+------+-----+-----+------+------+ +------+------+------+ ------+------+
| 1,0 | 1,1 | 1,3 |
|
+------+-----+-----+------+------+ +------+------+------+ ------+------+
| 2,0 | 2,1 | 2,3 |
|
+------+-----+-----+------+------+ +------+------+------+ ------+------+
| 3,0 | 3,1 | 3,3 |
|
+------+-----+-----+------+------+ +------+------+------+ ------+------+
| 4,0 | 4,2 | 4,4 |
|
+------+-----+-----+------+------+ +------+------+------+ ------+------+

Chỉ mục mảng 2-D [i][j] => chỉ mục mảng 1-D [i*5 + j]

...nếu bạn nghĩ về nó theo cách này, thì nguyên tắc tương tự cũng áp dụng cho trường hợp 3 chiều (và tiếp tục như vậy đối với các chiều cao hơn - ngày càng khó hình dung!):

int [5] [5] [5] :

+------+-----+-----+------+------+ +------+------+------+ ------+------+
|+------+------+-----+------+------+ |+------+------+---- -+------+------+
||+------+-----+-----+------+------+ ||+------+-----+-- ---+------+------+
|||+-----+-----+-----+------+------+ |||+------+-----+ ------+------+-----+
||||1,0,0|1,0,1|1,0,2|1,0,3|1,0,4| 26 |
|||| +------+-------+------+------+----+ |||| -+------+------+-------+
|||+---|0,0,0|0,0,1|0,0,2|0,0,3|0,0,4| |||+---| 1 | 2 | 3 |
||||1,1|
|||| +------+-------+------+------+----+ |||| -+------+------+-------+
|||+---|0,1,0|0,1,1|0,1,2|0,1,3|0,1,4| |||+---| 5 | 7 | 8 |
||||1,2|
|||| +------+-------+------+------+----+ |||| -+------+------+-------+
|||+---|0,2,0|0,2,1|0,2,2|0,2,3|0,2,4|=>|||+---| 10 | 11 | 12 | 13 |
||||1,3|
|||| +------+-------+------+------+----+ |||| -+------+------+-------+
+||+---|0,3,0|0,3,1|0,3,2|0,3,3|0,3,4| +||+---| 15 | 17 | 18 |
+||1,4|
+| +------+-----+------+------+-----+ +|----+-----+-- ---+------+------+
+---|0,4,0|0,4,1|0,4,2|0,4,3|0,4,4| 20 | 23 |
|
+------+-----+-----+------+------+ +------+------+------+ ------+------+

Chỉ mục mảng 3-D [i][j][k] => chỉ mục mảng 1-D [i*5*5 + j*5 + k]

Về thuật toán chuyển đổi mảng nhiều chiều thành mảng một chiều, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/3613429/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress