我正在讀取運行具有不同配置的程序的統計數據。假設有6種配置(a
,b
,...,f
)。配置可能不會線性變化,所以如果您將測量結果視爲表格,表格中可能存在空白。問題在於關於在存儲器中構造這些統計數據。替代嵌套數組(6維),保留O(1)的存儲空間訪問權限
,想到的第一件事是看這些配置動態分配的6深或多個陣列:
struct data ******measurements;
現在能正常工作。你只有很少的內存開銷(只有實際分配數據的配置),訪問時間爲O(1)
。
除了大多數人不喜歡******
指針這個事實,它的缺點是添加配置意味着向數組添加維度,除非讀寫數組被封裝在函數中,否則可能會變得很難看。 (必要時Write已經被封裝來處理分配,所以這實際上並不是什麼大不了的事)。
想到的另一個想法是使用AVL樹或東西(我already have所以沒有實現間接費用)使用地圖struct config
到struct data
。這解決了擴展配置參數的問題,但將訪問時間減少到O(log(n))
。
對於O(log(n))
來說,測試次數可能會相當大。
我的問題是:在這裏使用6深層嵌套數組是否合理?或者有更好的方法來做到這一點?
爲什麼不使用一臺單維數組,做你自己的指數計算,而不是讓編譯器做呢? –
擁有n維數組將增加緩存未命中的可能性,並可能導致代碼的性能很差。採用智能數據結構將帶來更好的性能。如果你的數據集是標稱恆定,你可以打造擁有近O(1)與唯一的缺點好的哈希函數查找是你必須首先構建它的哈希表... – Mosby
這不是6D數組,但只有一個仿效它。 C具有內置的n維數組,不需要指針開銷。 –