備戰秋招 演算法與資料結構(15)

2021-10-09 03:55:40 字數 1592 閱讀 1198

方法一:

(1)cat file|sed 『s/[,.:;/!?]/ /g』|awk 『' at position 6: i]++;}̲ end

end』

#(1)和(2)效果一致。

方法二:

(1)awk 『begin

end』 file

redis的五大資料型別也稱五大資料物件;前面介紹過6大資料結構,redis並沒有直 接使用這些結構來實現鍵值對資料庫,而是使用這些結構構建了乙個物件系統 redisobject;這個物件系統包含了五大資料物件,字串物件(string)、列表物件 (list)、雜湊物件(hash)、集合(set)物件和有序集合物件(zset);而這五大 物件的底層資料編碼可以用命令object encoding來進行檢視。

1.字串物件(string):字串物件底層資料結構實現為簡單動態字串(sds)和直接 儲存,但其編碼方式 可以是int、raw或者embstr,區別在於記憶體結構的不同。

2.列表物件(list):列表物件的編碼可以是ziplist和linkedlist。

3.雜湊物件(hash):雜湊物件的編碼可以是ziplist和hashtable。

4.集合物件(set):集合物件的編碼可以是intset和hashtable。

5.有序集合物件(zset):有序集合的編碼可以是ziplist和skiplist。

(1)ziplist編碼

ziplist編碼的有序集合物件底層實現是壓縮列表,其結構與雜湊物件類似,不同的是 兩個緊密相連的壓縮列表節點,第乙個儲存元素的成員,第二個儲存元素的分值,而且 分值小的靠近表頭,大的靠近表尾。

(2)skiplist編碼

skiplist編碼的有序集合物件底層實現是跳躍表和字典兩種;

每個跳躍表節點都儲存乙個集合元素,並按分值從小到大排列;節點的object屬性保 存了元素的成員,score屬性儲存分值;

字典的每個鍵值對儲存乙個集合元素,字典的鍵儲存元素的成員,字典的值儲存分值。

①匿名管道(pipe)和有名管道(fifo):最簡單

②訊號(signal):系統的開銷最小

③共享對映區(mmap):可以在無血緣關係的程序間通訊

④本地套接字(socket):最穩定(但是比較複雜)

vector的實現通常會分配比新的空間需求更大的記憶體空間。容器預留這些空間作為備 用,從而用來儲存更多新的元素。這樣,就不需要每次新增新的元素都重新分配容器的 記憶體空間了。

在插入新元素時,若遇到已分配容量不足的情況,會自動拓展容量大小,而這個拓展容 量的過程為:

開闢另外一塊更大的記憶體空間,該空間大小通常為原空間大小的兩倍(理論分析上是 1.5最好,但從時間和空間上綜合考慮,一般取2);

將原記憶體空間中的資料拷貝到新開闢的記憶體空間中;

析構原記憶體空間的資料,釋放原記憶體空間,並調整各種指標指向新記憶體空間。

vector型別提供了一些成員函式,允許我們與它的現實中記憶體分配部分互動。

c.capacity() 不重新分配記憶體空間的話,c可以儲存多少元素

c.reserve(n) 分配至少能容納n個元素的記憶體空間

c.shrink_to_fit() 將capacity()減少為size()相同大小,size()為vector已經儲存元素個數。

備戰秋招 演算法程式設計題集錦(持續更新)

1.清雨的自助餐 題目描述 清雨又在吃自助餐了。排在清雨面前的有n種食物,排成一排,清雨可以選擇其中的若干種食物,但是不能連續選擇相鄰的食物。因為清雨很挑食,當所有食物都不合胃口的時候,他可以一種都不選,即乙個都不選也算為一種方法。請問他有多少種選擇食物的方法?輸入 乙個整數n 1 n 90 輸出 ...

資料結構與演算法15 氣泡排序

通過例子消化概念 printf 排序後的結果是 for i 0 i 10 i printf n return 0 下標元素05 1221 3344 5667 7788 99在下標為0時,下標0的元素和剩下的元素比較大小 在下標為1時,下標1的元素和剩下的元素比較大小 以此類推 氣泡排序的要點 兩兩 ...

資料結構與演算法 15 堆排序

3 實現 4 時間複雜度 5 穩定性 6 測試 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序。乙個待排序的陣列,把它看成是順序儲存的二叉樹,假設要公升序排列,先把這個二叉樹調整為大頂堆,其頂端元素為最大值,把頂端元素和末尾元素互換後,再次把堆調整為大頂堆。如此迴圈,直到整個...