Re: [問題] 有另外的資料結構來代表大型的多維陣列嗎?
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: ※ 引述《chiachenyen (阿成)》之銘言:
: : 近來需要寫一支程式,有一個小困擾~
: : 程式需要計算數十維度的資料,若宣告成:
: : int record[][][][][][][][][][]=new int[25][25][25][25][25][25][25][25][25][25];
: : 顯然得,不可行~
: : 這麼大的多維陣列,其實也可能只有100個elements會用到(或是更少),
: : 但因為這些elements都會分散在這個多維陣列之中,我有考慮過用vector來作,
: : 也就是說,用"編號"的方式來作,這麼一來,如果只需100個elements,
: : 也就真正的只需100個~
: : 如了這個外,不曉得各位先進還有其他建議的方法嗎~?
: 麻煩請 post 成 BBS 方便看 & 方便引言的文章格式
: 只宣告一個一維陣列
: 然後寫個 method 接參數,就可以取出你要的
: 這道理其實很簡單,假設一個二維 3*4 的矩陣
: 0 1 2
: 3 4 5 = 0 1 2 3 4 5 6 7 8 9 10 11
: 6 7 8
: 9 10 11
: 你要取第三行第二個(就是 [2][1])7
: 其實就是一維陣列的 [2*3+1]
: 其他,就是麻煩而已,不難
痞子你好壞。XD
以他的例子來看,假設只是三維各長25的陣列,
你這個一維陣列長度也要15625之多。XD
他的問題比較接近稀疏矩陣,屬於範圍大但是資料少的問題。
(十幾維度的資料,卻只有一百筆這樣。)
底下是良葛格對稀疏矩陣的介紹 覺得可以值得參考
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/SparseMatrix.htm
如果以原PO的想法來看,hash也是個不錯的選擇,
個人覺得痞子提的方式是個不錯的hash法,因為不會重複。
只是我會比較想用 Map<String,Integet> 做,而不會想用一維陣列。(逃)
--
String temp="relax"; | Life just like programing
while(buringlife) String.forgot(temp); | to be right or wrong
while(sleeping) brain.setMemoryOut(); | need not to say
stack.push(life.running); | the complier will
stack.push(scouting.buck()); | answer your life
stack.push(bowling.practice()); | Bone everything
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
推
02/01 20:15, , 1F
02/01 20:15, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 11 篇):