C 高階程式設計五十九天 集合的效能

2021-07-04 03:23:09 字數 2654 閱讀 2067

各種集合的效能

許多集合類提供了相同的功能,

例如,sortedlist

類與sorteddictionary

類的功能幾乎完全相同.但是

,其效能常常有很大的區別

.sortedlist

集合使用的記憶體少

,sorteddictionary

集合的元素檢索速度快.

在msdn

文件中,

集合的方法常常有效能提示

,給出了以大

o(字母

)表示的操作時間:

o(1)

o(log n)

o(n)

o(1)表示無論集合中有多少資料項

,這個操作需要的時間都不變.例如

arraylist

類的add()

方法就具有

o(1)行為.

無論列表中有多少個元素

,在列表末尾新增乙個新元素的時間都相同

.count

屬性會給出元素個數

,所以很容易找到列表末尾.

o(n)表示對於集合中的每個元素

,需要增加的時間都相同

.如果需要重新給集合分配記憶體

,arraylist

類的add()

方法就是乙個

o(n)操作.

改變容量

,需要複製列表

,賦值的時間隨元素的增加而線性增加.

o(log n)表示操作需要的時間隨集合中元素的增加而增加

,但每個元素需要增加的時間不是線性的

,而是呈對數曲線

.在集合中執行插入操作時

,sorteddictionary

集合類具有

o(log n)行為,

而sortedlist

集合類具有

o(n)行為.

這裡sorteddictionary

集合類要快得多

,因為它在樹形結構中插入元素的效率要比列表中高得多.

下表列出了集合類及其執行不同操作的效能,

例如新增

,插入和刪除元素

.使用這個表可以選擇效能最佳的集合類

.左列是集合類

,add

列出了在集合中的新增元素所需要的時間

.list

和hashset

類把add

方法定義為集合中新增元素

.其他幾何類用不同的方法把元素新增到集合中.例如

stack

類定義了

push()

方法,queue

類定義了

enqueue()方法,

這些資訊也列在表中.

如果單元格中有多個大o值,

表示若集合需要重置大小

,該操作就需要一定的時間.例如

,在list類中,

新增元素的時間為

o(1).

如果集合的容量不夠大

,需要重置大小

,重置大小需要的時間長度就是

o(n).

集合越大

,重置大小操作的時間就越長

.最好避免重置集合的大小

,而應把集合容量設定為乙個可以包含所有元素的值.

就表示這個操作不能應用與這種集合型別.

集合addinsert

remove

item

sort

find

list

如果集合必須重置大小,

就是o(1)

或o(n)

o(n)

o(n)

o(1)

o(n log n),最壞的情況是

o(n^2)

o(n)

stack

push(),如果棧必須重置大小,就是

o(1)

或o(n) na

pop(),o(1)

nana

naqueue

enqueue(),如果集合必須重置大小,就是

o(1)

或o(n) na

dequeue(),o(1)

nana

nahashset

如果集合必須重置大小,

就是o(1)

或o(n)

add(),o(1)或

o(n)

o(1)

nana

nalinkedlist

addlast(),o(1)

addafter()

o(1)

o(1)

nana

o(n)

dictionary

o(1)或

o(n) na

o(1)

o(1)

nana

sorteddictionary

o(log n)

nao(log n)

o(log n)

nana

sortedlist

無序資料為o(n);

如果必須重置大小就是

o(n);

到列表的尾部就是

o(log n) na

o(n)

讀寫是o(log n);

如果鍵在列表中,就是

o(log n);

如果鍵不在列表中,就是

o(n) na

na

C 高階程式設計十九天 部分類

部分類 c 中使用關鍵字 partial把類,結構或結構放在多個檔案中 一般情況下 乙個類全部駐留在單個檔案中 但有時候 多個開發人員需要訪問同乙個類 或者某種型別的 生成器生成了乙個類的某部分 所以把類放在多個檔案中是有益的.用法 把partial 關鍵字放在 class,struct 或inte...

學習linux的第五十九天

redis 是乙個開源 bsd許可 記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列 redis支援五種資料型別 string 字串 hash 雜湊 list 列表 set 無序集合 及 zset sorted set 有序集合 內建複製 lua指令碼 lru收回 事務以及不同級別磁碟...

冥想第十九天

不能怪自己多心,畢竟出現不舒服的感覺是因為大腦太關切自己的身體了。一點也不想讓它受刺激。今天出來玩了,早上做了體檢。又帶著小妞妞出來打了預防針,後又跟著朋友出來滎陽南嶺玩了,到時有點困,告訴自己要接受,好好接受當下 但不反抗,知道是正常的。坐上車後睡了一會,所有的精力都回來了。當和朋友一起回來的時候...