在各種語言中,使用key在map中獲取value 和 使用下標獲取陣列中的資料 相比哪個更快?

時間 2021-06-06 11:19:27

1樓:

如果是紅黑樹實現的map,那用下標索引比key 索引快因為前者是O(1)時間複雜度,後者是O(log(N)).

如果是雜湊表實現,儘管邏輯上它與下標索引都是O(1)時間複雜度,但是下標索引減少了一步計算雜湊值的過程,以及沒有額外的計算來處理雜湊碰撞。

綜上,下標索引比key 索引在大部分情況下都要更快。

2樓:山楂山楂片

一般而言,陣列下標訪問的速度遠大於map訪問的速度。

陣列是記憶體中連續的空間,直接偏移量即可訪問到儲存的值,O(1)的複雜度,甚至只需要1個指令,常數也小。

map可能有兩周實現。一種是樹,一種是雜湊表。

樹,也就是二叉搜尋樹,訪問時會先和根節點比較大小,根據結果再訪問左節點或右節點,不斷遞迴下去。O(log n)的複雜度,而且每一步都需要比較再遞迴常數也大。value需要支援等於和小於。

雜湊表,會計算雜湊值,然後作為偏移量訪問元素,如果不是要找的也就是發生衝突,再比較下乙個(有開放定址和鍊表兩種解決衝突的方法)。O(1)的複雜度,但要計算雜湊值,還要比較,如果雜湊表較小,衝突較多,效能就更差。記憶體占得越多越快。

value需要支援雜湊和等於。

怎麼使用c語言中的sort排序,在結構體裡面按學號排序??

陳舸 問題描述的不是很清楚,不過我大概猜你是想對某些結構體做排序,結構體裡有個學號的字段,要以學號為標準來排序?可以使用qsort 隨手碼了乙份。include include include typedef struct student Student int compare const void...

為什麼在 Mathematica 中使用迴圈是低效的?

yi feng 沒用過該軟體,僅從寫程式的角度來回答這個問題,若有偏頗或者錯誤請提醒或者摺疊。程式都有空間與時間之間的矛盾,也就是說某種資料結構及演算法在面對不同型別問題時不可能總是最省記憶體又算得最快的,但在面對某一類問題時是最好的。同一問題,該軟體有多種寫法,不同寫法在內部由不同演算法和資料結構...

C語言中「 」使用時,當除數與被除數的資料型別不同時如何處理?結果的正負號是以除數為準還是被除數為準?

暮無井見鈴 補充一下。整數提公升 即若 int 能表示原整數型別的所有值,則提公升到 int 否則若 unsigned int 能表示原型別的所有值,則提公升到 unsigned int 其餘情況 int 與 unsigned int 都不能表示原型別所有值 下型別不變。譬如一些平台上 short ...