動態(dynamic)和靜態雜湊(static hashing)的區別

在資料結構中,雜湊是一種使用稱為雜湊函式的特殊函式將大量資料項對映到較小表的技術,以實現更快的訪問。有時資料結構非常龐大,幾乎不可能透過所有級別搜尋所有索引值來訪問最終的資料塊。這就是雜湊的用武之地。它所做的是直接計算資料記錄在磁碟上的位置,而不使用索引結構。每個記錄的地址是使用雜湊演算法確定的,該演算法將主鍵值轉換為記錄地址。因此,有兩類可用的索引使用雜湊函式-動態雜湊和靜態雜湊。...

在資料結構中,雜湊是一種使用稱為雜湊函式的特殊函式將大量資料項對映到較小表的技術,以實現更快的訪問。有時資料結構非常龐大,幾乎不可能透過所有級別搜尋所有索引值來訪問最終的資料塊。這就是雜湊的用武之地。它所做的是直接計算資料記錄在磁碟上的位置,而不使用索引結構。每個記錄的地址是使用雜湊演算法確定的,該演算法將主鍵值轉換為記錄地址。因此,有兩類可用的索引使用雜湊函式-動態雜湊和靜態雜湊。

什麼是靜態雜湊(static hashing)?

靜態雜湊是一種雜湊方法,其中為檔案分配固定數量的bucket來儲存記錄。儲存桶的數量是預先分配的,因此當提供搜尋鍵值時,雜湊函式總是計算相同的地址。一個檔案的頁面可以被看作是一個bucket集合,包含一個主頁面和額外的溢位頁面。對於靜態雜湊,定位機制是雜湊函式,不涉及資料結構。在這裡,索引項是隨機的,每個bucket中的索引項的數量大致相同。然而,這項計劃也有某些缺點。如果bucket的初始數目太小,檔案會增長,那麼效能會因為bucket溢位而下降。另一方面,如果規模過大,則會為預期增長分配大量空間,並浪費大量空間。

什麼是動態雜湊(dynamic hashing)?

另一方面,動態雜湊是一種用於剋服靜態雜湊(如桶溢位)限制的技術。與靜態雜湊不同,它允許桶的數量動態變化,以適應資料庫檔案的增長或收縮。它允許根據需要修改hash函式,這對於大小不斷增長和縮小的資料庫是很好的。在新增和刪除行時,它會相應地更改bucket的數量,以最小化bucket的溢位。它將溢位記錄的處理動態地嵌入到主地址空間中,以避免溢位儲存桶的控制代碼管理。動態雜湊的兩種常用形式是線性雜湊和可擴充套件雜湊。可擴充套件雜湊是一種流行的技術,它透過將一個bucket一分為二來處理bucket溢位,在新舊bucket之間分發記錄。線性雜湊是另一種流行的動態雜湊形式,它允許雜湊檔案透過分配新的儲存桶來動態地增長或收縮。

動態和靜態雜湊的區別

技術

–靜態雜湊是一種雜湊方法,其中為檔案分配固定數量的儲存桶以儲存記錄,這意味著檔案使用的雜湊函式中儲存桶地址的數量是固定的。在這裡,索引項是隨機的,每個bucket中的索引項的數量大致相同。另一方面,動態雜湊允許儲存桶的數量動態變化,以適應資料庫檔案的增長或收縮。

演出

–如果bucket的初始數目太小並且檔案增長,那麼效能會因為bucket溢位而下降。另一方面,如果規模過大,則會為預期增長分配大量空間,並浪費大量空間。另一方面,動態雜湊允許動態修改雜湊函式,這有利於資料庫大小的增長和收縮。在新增和刪除行時,它會相應地更改bucket的數量,以最小化bucket的溢位。

實施

–靜態雜湊使用固定的雜湊函式將所有可能的搜尋鍵值集劃分為子集,然後將每個子集對映到一個bucket。另一方面,動態雜湊使用對映的第二階段來確定與某個搜尋鍵值相關聯的bucket。可擴充套件雜湊和線性雜湊的對映方式非常不同。

動態與靜態雜湊:比較圖

總結

靜態雜湊中儲存桶的數量是固定的,具有不同搜尋關鍵字值的記錄指向同一個儲存桶,在這種情況下可能會發生衝突。如果需要在具有多個鍵的bucket中查詢特定記錄,則必須按順序搜尋整個bucket。有時候,一個bucket包含的記錄比它能包含的要多。因此,在這種情況下,必須呼叫一些溢位處理技術。在這種情況下,將使用動態雜湊,它使用一個動態更改的函式,該函式允許分配的bucket數隨著行的新增和刪除而在大小上增長和收縮。它透過將溢位記錄動態嵌入主地址來顯式處理bucket的溢位。

  • 發表於 2021-06-26 19:10
  • 閱讀 ( 267 )
  • 分類:科技

你可能感興趣的文章

靜止的(static)和動態記憶體分配(dynamic memory allocation)的區別

關鍵區別–靜態記憶體分配與動態記憶體分配 在程式設計中,有必要儲存計算資料。這些資料儲存在儲存器中。在計算機程式設計中用來儲存資料的儲存器被稱為變數。變數具有特定的資料型別。因此,分配記憶體來執行程...

  • 發佈於 2020-10-11 12:09
  • 閲讀 ( 244 )

靜止的(static)和java期末考試(final in java)的區別

...用類名呼叫該方法。參考以下程式。 圖01:帶有靜態變數和靜態方法的Java程式 根據上面的程式,A類包含了數字變數和顯示方法。兩者都是靜態成員。因此,不需要建立一個物件來訪問數字變數和顯示方法。程式設計師可以直接...

  • 發佈於 2020-10-19 07:48
  • 閲讀 ( 58 )

靜態繫結(static binding)和動態繫結(dynamic binding)的區別

關鍵區別–靜態繫結與動態繫結 Java和C等程式語言支援面向物件程式設計(OOP)。它允許使用物件構建軟體。軟體系統或程式中有許多物件。這些物件具有屬性和方法。屬性描述特徵。方法描述物件可以執行的操作。資料使...

  • 發佈於 2020-10-19 17:49
  • 閲讀 ( 95 )

靜止的(static)和動態特性(dynamic characters)的區別

靜態與動態特性 在文學領域,靜態人物和動態人物是兩個重要的話題,靜態人物和動態人物之間存在著許多不同之處,使得它們易於識別。那些養成閱讀習慣的人經常在小說、短篇小說等中遇到各種各樣的人物,這些人物並...

  • 發佈於 2020-10-24 16:55
  • 閲讀 ( 51 )

靜止的(static)和動態路由(dynamic routing)的區別

靜態與動態路由 靜態路由和動態路由的區別在於路由條目進入系統的方式。計算機網路中的路由是指在計算機網路中正確地轉發資料包,使資料包最終到達正確的目的地的過程。路由主要有靜態路由和動態路由兩種型別。在...

  • 發佈於 2020-10-29 09:42
  • 閲讀 ( 50 )

靜態穩定性(static stability)和動力穩定性(dynamic stability)的區別

靜態穩定性與動態穩定性 一般來說,飛機的穩定性是指飛機維持特定規定飛行條件的能力。穩定性的概念與飛機的平衡密切相關。如果施加在飛機上的淨力和力矩為零,則飛機處於平衡狀態,即升力等於重量,推力等於阻力...

  • 發佈於 2020-11-03 15:19
  • 閲讀 ( 167 )

動態(dynamic)和靜態ip(static ip)的區別

動態IP是指每次連線到網路時都會發生變化的IP,而靜態IP是指無論連線多少次或從網路斷開多少次都保持不變的IP。您是否有靜態或動態IP地址取決於所述網路的管理員。每次連線到網路時,動態IP都會發生變化;這是一種在連線...

  • 發佈於 2021-06-22 11:51
  • 閲讀 ( 52 )

加密(encryption)和雜湊(hashing)的區別

加密與雜湊 加密是使用一種演算法將純文字(即一些有用的資訊)轉換成文字的過程,該文字可以由擁有解鎖該資訊的金鑰的人讀取。使用的演算法稱為密碼,要解鎖資料,需要有金鑰。最簡單的加密過程之一是使用簡單金鑰...

  • 發佈於 2021-06-23 18:52
  • 閲讀 ( 43 )

動摩擦(kinetic friction)和靜摩擦(static friction)的區別

...。 根據錶面是靜止還是相對運動,摩擦分為靜態摩擦和動態摩擦。   什麼是動摩擦(kinetic friction)? 動摩擦力是兩個相互接觸的物體之間的阻力。這取決於接觸面的型別。對於粗糙和乾燥的錶面,動摩擦較大,而對於潮濕和光...

  • 發佈於 2021-06-25 06:35
  • 閲讀 ( 288 )

最終的(final)和靜止的(static)的區別

...情況下,最好只寫類名、點和呼叫方法的名稱。   最終和靜態之間的差異 變數 Static表示一個變數,它是例項化給定類的所有物件的公共變數,final定義常量。 方法 靜態是一種方法,對於給定類的每個物件都是相同的-也稱為...

  • 發佈於 2021-06-25 15:47
  • 閲讀 ( 57 )