我想弄清鋸齒陣列的用處是什麼? 我的意思是在現實生活中有任何鋸齒陣列的應用? 任何建議將不勝感激什麼情況下鋸齒形陣列比普通矩形陣列更受歡迎?
0
A
回答
3
什麼是「真實的生活情況」?立即想到的一個例子是存儲稀疏矩陣。通常將矩陣存儲爲稱爲「密集」表示的二維數組。它被稱爲密集的,因爲它存儲數組的每個元素。但是在某些情況下,數組中的許多元素都是0(或者可能是其他值),並且明確地存儲它們是沒有意義的。許多稀疏矩陣表示使用少量的一維數組。
真正參差不齊的陣列在你不希望每個1D陣列具有相同長度的情況下非常有用。鋸齒形數組也使得更換整個「行」變得更容易。
需要注意的是,在.NET中至少應該指出jagged arrays usually have better performance than multidimensional arrays。
3
如果你關心速度,那麼你總是傾向於鋸齒陣列在多維數組上。 .NET運行時支持(抖動和CLR)在載體和陣列之間進行了很強的區分。一個向量是一個數組的特殊情況,一個維度的起始索引爲0.它是非常的在CLR內部進行了大量優化,拉動了每個possible trick。抖動,爲數組邊界檢查消除提供了強大的可能性。
鋸齒狀數組是向量的向量,當您使用它們時,您可以獲得所有的運行時優化。多維數組不。速度差約爲factor of two。
如果您偏愛語法便利性並驗證了數組索引不在您的程序的關鍵路徑中,那麼請考慮使用多維數組。
0
下面是一個簡單的例子:
比方說,由於某種原因,你需要factorise整數。對於小整數來說,創建一個查找表可能是有意義的,以加快速度。那將是一個鋸齒狀的陣列。
int[][] factors = new int[][]
{
null, // 0 doesn't have prime factors
new int[] { }, // 1 is the trivial case
new int[] { 2 },
new int[] { 3 },
new int[] { 2, 2 },
new int[] { 5 },
new int[] { 2, 3},
new int[] { 7 },
new int[] { 2, 2, 2 },
new int[] { 3, 3 },
new int[] { 2, 5 },
// ... and so on
};
int[] PrimeFactorsOf(int value)
{
if (value < factors.Length)
{
return factors[value];
}
else
{
// do the work
}
}
相關問題
- 1. Javafx:交換矩形形狀以及鋸齒陣列元素
- 2. 程序顯示矩陣鋸齒形
- 3. 鋸齒陣列與陣列陣列
- 4. C#3.0鋸齒陣列性能優化與矩形陣列如何工作?
- 5. 鋸齒狀和矩形陣列之間的差異
- 6. 動態創建的鋸齒狀矩形陣列
- 7. 鋸齒陣列排列
- 8. 2d陣列的鋸齒陣列
- 9. 比較鋸齒陣列中的值
- 10. array.Contains()在鋸齒陣列
- 11. 鋸齒陣列和異常
- 12. 初始化鋸齒陣列
- 13. Microoptimizing D鋸齒狀陣列
- 14. F#鋸齒陣列分配
- 15. Libgdx矩形陣列
- 16. 爲什麼鋸齒形圖?
- 17. 爲什麼tinyALSA比libasound更受歡迎?
- 18. 鋸齒狀陣列和展平陣列,哪個性能更好?
- 19. 鋸齒形陣列:非法表達式開始
- 20. 如何扭轉三角形鋸齒狀陣列?
- 21. 將幾個圖像保存爲一個鋸齒形陣列
- 22. 序列化鋸齒和多維陣列
- 23. 過濾矩形以2:從矩形的陣列1高寬比
- 24. 複製2D陣列從鋸齒狀2D陣列到另一個鋸齒狀2D陣列
- 25. 帶宏的矩形陣列
- 26. 如何將鋸齒陣列從一種形式傳遞給另一種形式?
- 27. groupByKey比reduceByKey更受歡迎
- 28. 拼合成鋸齒狀的2D陣列
- 29. 用Javascript編輯鋸齒陣列
- 30. Powershell - 格式鋸齒陣列輸出
性能通常對鋸齒狀陣列更好。 – CodesInChaos