Discussion:
[問題] 有另外的資料結構來代表大型的多維陣列嗎?
(时间太久无法回复)
阿成
2007-02-01 07:03:26 UTC
Permalink
近來需要寫一支程式,有一個小困擾~
程式需要計算數十維度的資料,若宣告成:

int record[][][][][][][][][][]=new int[25][25][25][25][25][25][25][25][25][25];

顯然得,不可行~
這麼大的多維陣列,其實也可能只有100個elements會用到(或是更少),但因為這些elements都會分散在這個多維陣列之中,我有考慮過用vector來作,也就是說,用"編號"的方式來作,這麼一來,如果只需100個elements,也就真正的只需100個~
如了這個外,不曉得各位先進還有其他建議的方法嗎~?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.22.252
痞子軍團團長
2007-02-01 07:42:48 UTC
Permalink
※ 引述《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]

其他,就是麻煩而已,不難

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.201.49
骨頭
2007-02-01 12:15:54 UTC
Permalink
※ 引述《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
推 PsMonkey:討厭~死相~ 說人家好壞 >////<  02/01 20:15
遙遠的旅人
2007-02-01 17:07:27 UTC
Permalink
※ 引述《chiachenyen (阿成)》之銘言:
: 近來需要寫一支程式,有一個小困擾~
: 程式需要計算數十維度的資料,若宣告成:
: int record[][][][][][][][][][]=new int[25][25][25][25][25][25][25][25][25][25];
: 顯然得,不可行~
: 這麼大的多維陣列,其實也可能只有100個elements會用到(或是更少),但因為這些elements都會分散在這個多維陣列之中,我有考慮過用vector來作,也就是說,用"編號"的方式來作,這麼一來,如果只需100個elements,也就真正的只需100個~
: 如了這個外,不曉得各位先進還有其他建議的方法嗎~?

分析一下你的問題:

1.資料的Index有十個左右的int屬性

2.總資料比數大約100筆左右

3.在這個資料結構上定義的運算未知。

4.資料的CRUD趨向不明。

資料結構的決定是跟運算有很大的相依性的。
不知道你會需要做什麼樣的運算就不太好設計適當的資料結構。

依你的資料量來看,應該之前其他網友建議的稀疏矩陣方式就很好用了。
不過在儲存架構上,如果知道Index之間的關係與運算Iteration的方式
則更能設計有效率的結構。



--

JAVA 是一個靜態型別reference指定、強物件型別判定的語言。

屬於類C/C++族。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.85.116.116
._.
2007-02-02 20:57:59 UTC
Permalink
因為我很懶.

所以我都直接拿個 HashSet.

key 的部分就 維度空格維度空格維度...
value 的部分就陣列裡面要塞的東西...

反正可以黏起來, 要拆有 String.split(" ")...
只是要 int 跟 String 轉來轉去而已...

--

不要問我跑起來效能如何 (逃)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.101.99
阿成
2007-02-03 00:59:21 UTC
Permalink
※ 引述《zanyking (遙遠的旅人)》之銘言:
: ※ 引述《chiachenyen (阿成)》之銘言:
: : 近來需要寫一支程式,有一個小困擾~
: : 程式需要計算數十維度的資料,若宣告成:
: : int record[][][][][][][][][][]=new int[25][25][25][25][25][25][25][25][25][25];
: : 顯然得,不可行~
: : 這麼大的多維陣列,其實也可能只有100個elements會用到(或是更少),但因為這些elements都會分散在這個多維陣列之中,我有考慮過用vector來作,也就是說,用"編號"的方式來作,這麼一來,如果只需100個elements,也就真正的只需100個~
: : 如了這個外,不曉得各位先進還有其他建議的方法嗎~?



======================================================
: 分析一下你的問題:
: 1.資料的Index有十個左右的int屬性
: 2.總資料比數大約100筆左右
: 3.在這個資料結構上定義的運算未知。
: 4.資料的CRUD趨向不明。
======================================================
感謝各位先進的建議~
怒小弟不才,zanyking先進所說的第1、3、4項,可否再請您說明,雖然小弟的問題已解決
可是,仍希望可以更清楚zanyknig先進您所分析的項目。



: 資料結構的決定是跟運算有很大的相依性的。
: 不知道你會需要做什麼樣的運算就不太好設計適當的資料結構。
: 依你的資料量來看,應該之前其他網友建議的稀疏矩陣方式就很好用了。
: 不過在儲存架構上,如果知道Index之間的關係與運算Iteration的方式
: 則更能設計有效率的結構。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.22.252

Loading...