中智行筆試

2021-10-08 17:52:55 字數 2691 閱讀 3585

都是o(n^2)。

最好為o(n)。

o(og(n))

lru的典型實現是hash map + doubly linked list

主要差別:

list 是雙向鍊錶,forward_list 是雙向鍊錶。

成員函式差異:

函式名 list forward_list

back() has no

size() has no

insert() has no

emplace() has no

erase() has no

push_back() has no

emplace_back() has no

splice() has no

before_begin() no has

cbefore_begin() no has

insert_after() no has

emplace_after() no has

erase_after() no has

splice_after() no has

其中的元素僅知道後面的元素,不知道前面的元素。(單向鍊錶的特性)所以類似於 insert 這樣的操作,需要指定前乙個元素的迭代器,然後執行插入,才可以把整個鍊錶連線起來。

list的特點

不支援隨機訪問;

在任何位置插入或刪除非常迅速;

forward_list的特點

forward_list只提供錢箱迭代器,因此不支援反向迭代器,比如rbegin()等成員函式。

forward_list不提供size()成員函式。

forward_list沒有指向最末元素的錨點,因此不提供back()、push_back()和pop_back()。

forward_list不提供隨機訪問,這一點跟list相同。

插入和刪除元素不會造成「指向至其他元素」的指標,引用和迭代器失效。

雜湊表使用hash function來對輸入的資料分配index到雜湊表對應的槽中。假設有乙個雜湊表的size是100,而我們輸入的資料是從0~99,我們要把輸入資料儲存到雜湊表中。理論上來說,該雜湊表插入和查詢操作的時間複雜度都是o(1)。

二叉樹遵循右子樹大於根節點,左子樹小於根節點的原則進行資料的插入和儲存。如果這個樹的平衡的,那麼,對於每個元素的插入和查詢操作的時間複雜度是o(log(n)),n是樹的節點個數,log(n)通常是樹的深度。當然,對於不平衡的情況,那就需要更複雜的資料結構的樹(紅黑樹等)進行處理。

上文似乎得出結論雜湊表要好於二叉樹,但是it is not always the case。雜湊表有以下幾個突出的缺點:

當更多的數插入時,雜湊表衝突的可能性就更大。對於衝突,雜湊表通常有兩種解決方案:第一種是線性探索,相當於在衝突的槽後建立乙個單鏈表,這種情況下,插入和查詢以及刪除操作消耗的時間會達到o(n),且該雜湊表需要更多的空間進行儲存。第二種方法是開放定址,他不需要更多的空間,但是在最壞的情況下(例如所有輸入資料都被map到了乙個index上)的時間複雜度也會達到o(n)。

所以,在決定建立雜湊表之前,最好可以估計輸入的資料的size。否則,resize雜湊表的過程將會是乙個非常消耗時間的過程。例如,如果現在你的雜湊表的長度是100,但是現在有第101個數要插入。這時,不僅雜湊表的長度可能要擴充套件到150,且擴充套件之後所有的數都需要重新rehash。

雜湊表中的元素是沒有被排序的。然而,有些情況下,我們希望儲存的資料是有序的。

另一方面,我們討論二叉樹:

二叉樹不會有衝突(collision),這意味著我們能夠保證二叉樹的插入和查詢操作一直都是o(log(n))的時間複雜度。

二叉樹的空間占用跟輸入的輸入資料一致。所以我們不需要為二叉樹預先分配固定的空間。所以,你也不需要預先知道輸入資料的size。

所有的元素在樹中是排序好的。

很簡單最優但不完全

1.什麼是可雜湊的(hashable)不該改變的(imutable)?

如果乙個物件在自己的生命週期中有一雜湊值(hash value)是不可改變的,那麼它就是可雜湊的(hashable)的,因為這些資料結構內建了雜湊值,每個可雜湊的物件都內建了__hash__方法,所以可雜湊的物件可以通過雜湊值進行對比,也可以作為字典的鍵值和作為set函式的引數。所有python中所有不可改變的的物件(imutable objects)都是可雜湊的,比如字串,元組,也就是說可改變的容器如字典,列表不可雜湊(unhashable)。我們使用者所定義的類的例項物件預設是可雜湊的(hashable),它們都是唯一的,而hash值也就是它們的id()。

雜湊(雜湊?whatever)是乙個將大體量資料轉化為很小資料的過程,甚至可以僅僅是乙個數字,以便我們可以用在固定的時間複雜度下查詢它,所以,雜湊對高效的演算法和資料結構很重要。

不可改變性是指一些物件在被建立之後不會因為某些方式改變,特別是針對任何可以改變雜湊物件的雜湊值的方式。

兩者相聯絡是因為雜湊鍵值一定是不可改變的,所以它們對應的雜湊鍵值也不改變。如果允許它們改變,,那麼它們在資料結構如雜湊表中的儲存位置也會改變,因此會與雜湊的概念違背,效率會大打折扣。

11 12 10人行筆試

今天是人行分支機構的筆試,考察的範圍很廣,包括資料結構 作業系統 計算機組成原理和計算機網路等。有的東西確實是看過,但沒有好好思考的,記錄如下。關於衝突域和廣播域 衝突域 在同乙個衝突域中的每乙個節點都能收到所有被傳送的幀 廣播域 網路中能接收任一裝置發出的廣播幀的所有裝置的集合 衝突域是基於第一層...

台州銀行筆試考什麼 農信社(農商行)筆試考什麼?

首先我們需要了解的是各省農信社 農商行 是單獨組織招聘的,招聘方式不同 條件不同,考試內容也不近相同。從全國來講農信社筆試科目一般包含 行測 包括數量關係 言語理解 判斷推理 資料分析 公基 包括法律 文學常識 時事政治 管理等 專業知識 包括金融 經濟 財會 計算機等 寫作或申論等,有些省份農信社...

2017招商銀行筆試01

招商銀行筆試 6.a 不是很確定 hashmap 實際上是乙個鍊錶的陣列,hashmap 的乙個功能缺點是它的無序性,被存入到 hashmap 中的元素,在遍歷 hashmap 時,其輸出是無序的。如果希望元素保持輸入的順序,可以使用 linkedhashmap 替代。treemap 有著比 has...