8

Tôi biết cách mô phỏng mảng 2d trong mảng tuyến tính bằng cách sử dụng [x + y * width] làm chỉ mục tuyến tính.mô phỏng tuyến tính của mảng đa chiều

Tôi có thể mở rộng mảng này sang mảng 3D: [x + y * width + z * width * height].

Có công thức chung cho mảng N-chiều không?

Tôi đang tìm kiếm câu trả lời về thuyết bất khả tri về ngôn ngữ.

Trả lời

7

Chắc chắn. Chỉ cần mở rộng ví dụ bạn mang đến cho x + y*width + z*width*height + w*width*height*depth + ...

Nói cách khác, dim1 + dim2*size1 + dim3*size1*size2 + dim4*size1*size2*size3 + ...

1

Eh, nếu bạn muốn có một số mã ... :-) C là ngôn ngữ-agnostic đủ, ya?

Giả sử đầu vào: vị trí [kích thước]

Giả sử một bảng tồn tại maxBound [kích thước] có chứa các ranh giới tối đa mỗi chiều của bảng.

int index = 0; 
int multiplier = 1; 
for (int i = 0;i < dimensions;i++) 
{ 
    index += location[i] * multiplier; 
    multiplier *= maxBound[i]; 
} 

Chỉ mục của bạn sẽ kết thúc trong trường chỉ mục.

Test: 
location = [3,4,5] 
maxBound = [10,20,30] 
loop initial: index = 0, multiplier = 1. 
loop i=0: index = 3, multiplier = 10. 
loop i=1: index = 43, multiplier = 200. 
loop i=2: index = 1043, multipler = 6000. 

Tôi nghĩ điều này có ý nghĩa, nhưng điều này chỉ sắp ra khỏi đỉnh đầu của tôi.