2010-09-04 16 views
5

Tôi đã lập trình được 8 năm và bây giờ tôi đã tự hỏi rằng nếu có bất kỳ cách sử dụng thực tế nào của mảng N-Dimensional, trong đó N> 3. Tôi chỉ có thể hình dung của một cấu trúc dữ liệu đó là ít hơn hoặc bằng 3 dimension.Has bất kỳ một trong những sử dụng nhiều hơn 3 chiều trong bất kỳ chương trình? Có bất kỳ sử dụng thực tế của một mảng ND mà là ngoài 3d? Nếu vậy xin vui lòng gửi một số mẫu .Sử dụng thực tế các mảng N-Dimensional, trong đó (N> 3)

+3

Thông thường bạn sẽ sử dụng một số cấu trúc dữ liệu khác, vì dữ liệu chiều cao có xu hướng thưa thớt và phần lớn mảng sẽ bị lãng phí. – starblue

Trả lời

2

Các chỉ dụ phong nha tôi nhớ lại là trong văn bản 1982 Oh! Pascal! mang đến cho bạn một số ý tưởng về sự hiếm có trong trải nghiệm của tôi.

Ví dụ là một hệ thống chứng khoán lưu giữ nơi quần jean có thể được lập chỉ mục bởi

inventory[sex][size][length][color][fit] = number_received 

mà chỉ hơi giả tạo. Bạn sẽ không có vấn đề với một cơ sở dữ liệu có cấu trúc theo cách như vậy nhưng nó trông buồn cười như mã.

3

Lấy hầu hết mọi thứ từ vật lý, nơi mà các tensors là phổ biến, ví dụ: thuyết tương đối rộng, hóa học tính toán, vật lý lượng tử.

http://en.wikipedia.org/wiki/Tensor#Applications

Tensor với xếp hạng 4 là phổ biến chẳng hạn.

http://www.oonumerics.org/FTensor/FTensor.pdf

http://mpqc.svn.sourceforge.net/viewvc/mpqc/trunk/mpqc/src/lib/chemistry/qc/lmp2/lmp2.cc?revision=9342&view=markup&pathrev=9492

333  double 
334  LMP2::compute_ecorr_lmp2() 
335  { 
336  Timer tim("ecorr"); 
337  
338  sma2::Index r("r"), s("s"); 
339  sma2::Array<0> ecorr; 
340  double ecorr_lmp2 = 0.0; 
341  for (my_occ_pairs_t::const_iterator iter = my_occ_pairs_.begin(); 
342  iter != my_occ_pairs_.end(); 
343  iter++) { 
344  sma2::Index i(iter->first-nfzc_); 
345  sma2::Index j(iter->second-nfzc_); 
346  if (j.value() > i.value()) continue; 
347  double f; 
348  if (i.value() != j.value()) f = 2.0; 
349  else f = 1.0; 
350  ecorr.zero(); 
351  ecorr() += f * 2.0 * K_2occ_(i,j,r,s) * T_local_(i,j,r,s); 
352  ecorr() -= f * K_2occ_(i,j,s,r) * T_local_(i,j,r,s); 
353  ecorr_lmp2 += ecorr.value(); 
354  } 
355  
356  msg_->sum(ecorr_lmp2); 
357  
358  return ecorr_lmp2; 
359  } 
+0

Bạn có thể gửi mẫu mã (bất kỳ ngôn ngữ nào) không? – Emil

2

Ví dụ rõ ràng nhất là một danh sách các không gian voxel ... 3 + 1 = 4 kích thước :)

2

Một mảng chứa tất cả các dungeon trong Ultima III sẽ hợp lý là một mảng 4 chiều. Mỗi dungeon là một lưới ô ba chiều, và chúng đều có cùng kích cỡ.

Các vấn đề liên quan