對於2023年筆試題的反思

2021-10-06 01:24:19 字數 3014 閱讀 8714

最短路徑我們常識的是dijkstra、bellman-ford,spfa、 floyd、johnson演算法,下面主要講解其原理和差距。

在這之前,我們認識一下鬆弛操作。

鬆弛操作:首先測試一下是否可以對從s到v的最短路徑進行改善(即有沒有更短的路徑)。如果可以改善,則v.d更新為新的最短路徑估計值,v的前驅v.π更新為新的前驅結點。

對於鬆弛操作過程有如上的性質。

1.bellman-ford演算法

上面的性質主要用來證明此演算法的正確性。

演算法思想是對有v個頂點的圖進行v-1輪鬆弛操作,每輪遍歷所有邊,如果不能繼續鬆弛,則求最短路徑成功。

證明:設p為為一條s到v的最短路徑,p是簡單路徑則其邊數k<=v-1,那麼由路徑鬆弛性質,在第k輪鬆弛時,由於包含(vk-1,v)這條邊,有路徑鬆弛性質,s到v的最短路徑已得。

此外如果從動態規劃來考慮,不妨設d[k][v]表示從s到v經歷k條邊的最短路徑,顯然k最多為v-1,然後從k為1到v-1一直更新。然後用一維滾動陣列就可以化為我們熟悉的模式了,因為資料會被覆蓋,理論上應該不能用滾動陣列優化,但是:只要資料可以被更新,就代表v到u的距離可以邊更小,是不影響整體資料向更小方向推進的。

此演算法不能有負環

o(ve)

2.dijkstra演算法

這個演算法是貪心演算法。

其設定乙個集合s,存放訪問的結點,每次從選擇 v-s選擇距離s最短的頂點入s記u,然後更新從s到u通過u能到達其他結點的距離(鬆弛操作),直至選完。

如何證明:用迴圈不變式證明,演變成只要證明每一次加入s集合的點是已經最短了的即可(反證法並利用路徑鬆弛性質,假設還有一點y連線u不在s中即可)

此演算法不能有負邊

o(v²),o(vlog(v))

3.spfa

在bellman-ford演算法中,每輪都要對所有邊進行鬆弛操作,實際是只要上一輪被鬆弛操作後的邊所能到達的邊才可能會鬆弛操作發生改變,不妨用乙個佇列維護被鬆弛後的結點,取出這個結點時將可以其所連邊可以進行鬆弛操作的結點再入隊,直到隊列為空或者某個結點入隊超過v-1次(負環)

o(ke),k2左右

4.floyd演算法

典型老動歸了

證明最優子結構:

不妨設中間結點:一條簡單路徑p=上的中間結點是指路徑p上除v1和vl之外的其它任意結點。

設一條最短路徑的pij中間結點在s(1…k)中,則其子路徑的中間結點在s』(1…k-1)中(假設中間結點是否有k證明)

其有最優子結構,當所有中間結點被包括進去後,最短路徑已得。

分析上訴演算法的時間複雜度為o(v三次方),可以適用於不出現負環的圖,上面說到dijkstra算***可以達到o(vlg(v)),如果執行v次也比floyd-warshall演算法較優,但是不能解決邊權有負值的問題

5.johnson演算法

實際上,在稀疏圖中,可以使用johnson演算法達到o(v²lg(v)+ve)的複雜度,比比floyd-warshall演算法較優,實際上它的本質就是給所以邊加上一定權重後變成非負邊,再多次使用johnson演算法。

這裡的關鍵是怎樣加權重,並且所加權重不影響最短路徑!!

注意前面差分法約束系統我們所構造的約束圖有:

移項可以使得

1.關於資料庫概念設計和邏輯設計的大題

第一步確定聯絡,正過去,倒過來看是1:1還是1:n還是n:m

第二步畫er圖,標記聯絡的屬性。

第三步先寫出實體集的關係模式,對於1:1,1:n的聯絡,可將1端的碼加上聯絡屬性併入後者(簡潔)

第四步對於n:m的聯絡,需要以聯絡為名增加乙個關係模式,這個關係模式包含兩者的碼和聯絡屬性。

最後題意標記外碼和碼

2.資料庫設計過程各個階段的關鍵

需求分析:分析使用者應用需求,建立好資料字典(資料項,資料結構,資料流,資料儲存)

概念結構設計:e-r圖

邏輯結構設計:將概念模型轉化成某種資料模型

物理結構設計:為關係模式設計訪問方法、確定關係、索引儲存結構

資料庫的實施:裝入資料試執行

資料庫的執行維護:安全性、完整性、恢復

3.關於物理結構設計的知識拓展

這個部分主要兩步:為關係模式設計訪問方法;確定關係、索引物理儲存結構

訪問方法有三種:

索引訪問、聚簇訪問、hash訪問。

b+樹:是乙個平衡的多叉樹,從根節點到每個葉子節點的高度差值不超過1,而且同層級的節點間有指標相互鏈結。在b+樹上的常規檢索,從根節點到葉子節點的搜尋效率基本相當,不會出現大幅波動,而且可以基於索引的順序掃瞄時,也可以利用雙向指標快速左右移動,效率非常高。

因為被用在=,>,>=,範圍查詢,排序,應用大多情況

hash:hash查詢效率高,但只是儲存了指標,並沒有儲存字段值,無法範圍查詢,無法進行排序,多應用於等值連線條件。

聚簇索引:

把相同值的元組放在乙個物理塊,減少i/o操作,多適用於經常連線操作關係或者關係上某組屬性值重複率高

一般索引是關鍵字和記錄位置的對映關係

聚簇索引:不是關鍵字和記錄對映,而是關鍵字和記錄就儲存在一起。

京東2016筆試題

我的結果,深度搜尋。考試當場小毛病沒改出來16 正確率 後來發現橫縱座標寫反了。醉了。以後再也不用xy做座標了,用row col的話就不會想歪了。include include using namespace std int dfs vector map,int x,int y,int max,in...

京東2016筆試題

2016.年4月8日7點到9點考題,兩個程式設計題,就做出這乙個了,第二個沒時間了,感覺第二個程式設計題還好,不是很難 題目大致意思就是給定乙個8 8的棋盤,給定兩個點a,b,求從a到b需要走的最短步數,並列印最短路徑。走的每一步的方向可以為左 l 右 r 上 u 下 d 左下 ld 左上 lu 右...

騰訊2016筆試題(螺旋矩陣)

問題描述 輸入乙個整數n,輸出n階方陣,也即n n的矩陣 如 n 4,輸出如下 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 可以看成是數列一層一層往裡增加 最外面一層可以分為四段 1 2 3 a 4 5 6 b 7 8 9 c 10 11 12 d 同理,裡面一層分...