亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

用于基于陣列的數(shù)據(jù)存儲和搜索的系統(tǒng)及方法

文檔序號:8395926閱讀:399來源:國知局
用于基于陣列的數(shù)據(jù)存儲和搜索的系統(tǒng)及方法
【專利說明】用于基于陣列的數(shù)據(jù)存儲和搜索的系統(tǒng)及方法
【背景技術(shù)】
[0001] 在計算機(jī)系統(tǒng)中陣列是常見的、有用的、和重要的用來存儲和處理數(shù)據(jù)的數(shù)據(jù)結(jié) 構(gòu)。陣列是在同一名稱下組合的一組連續(xù)的內(nèi)存位置,其中每個單獨的位置經(jīng)由其索引或 下標(biāo)訪問。在計算機(jī)科學(xué)中,陣列通常用于實現(xiàn)靜態(tài)查找表以保存具有相同數(shù)據(jù)類型的多 個值。對陣列進(jìn)行排序可用于以有序的形式組織數(shù)據(jù)和迅速獲得這些數(shù)據(jù)。
[0002] 排序的陣列中的元素使用以O(shè)(logn)表示的二分搜索來查找;因此,排序的陣列 適用于需要能夠快速查找元素的情況。查找的復(fù)雜度與自平衡二叉搜索樹的復(fù)雜度相同。
[0003] 然而,已知在排序的陣列中插入和刪除元素是成本高的。在排序的陣列中插入和 刪除元素以〇(n)執(zhí)行。這是因為需要對待插入或待刪除的元素以后的所有元素進(jìn)行移動。 相比之下,自平衡二叉搜索樹以O(shè)(l〇gn)進(jìn)行插入和刪除。
[0004] 例如,當(dāng)建立含有n個元素的新的排序的陣列時,用于將所有n個元素一個接一個 插入到陣列中的成本為〇(n2)。當(dāng)n大時,成本非常高且使得常規(guī)陣列無法用于存儲排序的 數(shù)據(jù)元素。
[0005] 然而,陣列是簡單的且具有良好的局部引用性。在現(xiàn)代計算機(jī)系統(tǒng)中,陣列能利用 高速緩存存儲器來發(fā)揮其高性能。

【發(fā)明內(nèi)容】

[0006] 本公開提供了用于創(chuàng)建和使用排序的陣列的計算機(jī)系統(tǒng)和方法,該排序的陣列被 快速搜索且也快速形成和更新。在本發(fā)明的計算機(jī)系統(tǒng)和方法中實現(xiàn)的新的數(shù)據(jù)結(jié)構(gòu)被稱 為"排序的彈性陣列"(SEA)。SEA分配比實際存儲的元素更多的陣列單元,但并不包含如在 二叉搜索樹或多路樹中的所有指針,因此其存儲效率仍然高效。更重要的是,它將插入操作 從〇(n)改進(jìn)為O(logn)。
[0007] 因此,在一個實施方式中,提供了一種用于將輸入數(shù)據(jù)元素插入陣列中的計算機(jī) 系統(tǒng),包括處理器、存儲器和程序指令,所述程序指令當(dāng)由處理器執(zhí)行時,配置所述系統(tǒng)以 便:(a)將陣列加載到存儲器中,其中所述陣列的大小為B用于存儲最多B個數(shù)據(jù)元素,其 中,所述陣列包含T個數(shù)據(jù)元素,其中所述數(shù)據(jù)元素在所述陣列中被排序,使得所述陣列中 的任何不是空的位置包含的數(shù)據(jù)元素比所有存儲在左側(cè)的位置中的數(shù)據(jù)元素大,且比所有 存儲在右側(cè)的位置中的數(shù)據(jù)元素??;(b)在所述陣列中確定小于所述輸入數(shù)據(jù)元素的所有 數(shù)據(jù)元素中最大的第一數(shù)據(jù)元素、和大于所述輸入數(shù)據(jù)元素的所有數(shù)據(jù)元素中最小的第二 數(shù)據(jù)元素,其中,所述第一數(shù)據(jù)元素和所述第二數(shù)據(jù)元素彼此相鄰或者被所述第一數(shù)據(jù)元 素和所述第二數(shù)據(jù)元素之間的一個或多個空位置分隔;以及(c) (i)如果所述第一數(shù)據(jù)元 素和所述第二數(shù)據(jù)元素處于相鄰的位置,則將所述第一數(shù)據(jù)元素和所有左側(cè)相鄰的數(shù)據(jù)元 素向左側(cè)移動一個位置,然后將所述輸入數(shù)據(jù)元素放置到所述第一數(shù)據(jù)元素空出的位置 中,或者將所述第二數(shù)據(jù)元素和所有右側(cè)相鄰的數(shù)據(jù)元素向右側(cè)移動一個位置,然后將所 述輸入數(shù)據(jù)元素放置到所述第二數(shù)據(jù)元素空出的位置中,或者(ii)將所述輸入數(shù)據(jù)元素 放置到介于所述第一數(shù)據(jù)元素和所述第二數(shù)據(jù)元素之間的位置中。
[0008] 在一些方面,B至少比T大20%。在一些方面,所述第一數(shù)據(jù)元素和所述第二數(shù)據(jù) 元素被至少三個空位置分隔,且所述輸入數(shù)據(jù)元素被放置到所述空位置中的中間位置中。
[0009] 在一些方面,所述程序指令還使所述系統(tǒng)配置成:當(dāng)比值f=T/B大于預(yù)定的閾值 時,通過將用于L一B個附加位置的內(nèi)存分配給所述陣列來將所述陣列的大小擴(kuò)大至L。在 一些方面,所述預(yù)定的閾值在〇. 5和0. 9之間。
[0010] 在一些方面,所述程序指令還使所述系統(tǒng)配置成移動所述陣列中的一個或多個數(shù) 據(jù)元素,使得所述述陣列中的空位置分布得更均勻。
[0011] 在一些方面,所述程序指令還使所述系統(tǒng)配置成針對一個或多個新的輸入數(shù)據(jù)元 素重復(fù)步驟(b)和步驟(C)。在一些方面,針對不同的輸入數(shù)據(jù)元素,步驟(i)和步驟(ii) 都被執(zhí)行。
[0012] 在一些方面,所述程序指令還使所述系統(tǒng)配置成在第二索引陣列的位置P插入值 i,其中P是所述輸入數(shù)據(jù)元素的散列函數(shù)輸出,i是所述輸入數(shù)據(jù)元素在所述陣列中的位 置。在一些方面,所述陣列和所述第二索引陣列的長度相同。
[0013] 在一些方面,所述散列函數(shù)針對所述陣列中的每個數(shù)據(jù)元素產(chǎn)生唯一的非負(fù)整數(shù) 值。
[0014] 在一個實施方式中,還提供了一種從陣列中刪除查詢數(shù)據(jù)元素的計算機(jī)系統(tǒng),包 括處理器、存儲器和程序指令,所述程序指令當(dāng)由所述處理器執(zhí)行時,使所述系統(tǒng)配置成: (a)訪問包含T個數(shù)據(jù)元素的陣列,其中所述陣列的大小為B用于存儲最多B個數(shù)據(jù)元素, 所述數(shù)據(jù)元素在所述陣列中被排序,使得所述陣列中的任何不是空的位置包含的數(shù)據(jù)元素 比所有存儲在左側(cè)的位置中的數(shù)據(jù)元素大,而比所有存儲在右側(cè)的位置中的數(shù)據(jù)元素??; (d)確定所述陣列中包含與查詢數(shù)據(jù)元素相同的數(shù)據(jù)元素的位置;以及(c)將所述位置標(biāo) 記為空。
[0015] 在一些方面,所述程序指令還使所述系統(tǒng)配置成:當(dāng)比值f=T/B小于預(yù)定的閾 值時,移動所述陣列中的數(shù)據(jù)元素,使得所述陣列的一端具有一個或多個空位置,并從所述 陣列中刪除所述空位置,從而減小所述陣列的大小。在一些方面,所述預(yù)定的閾值在〇. 1和 〇. 7之間。在一些方面,在所述一端的所述空位置的數(shù)量為B的至少10 %。
【附圖說明】
[0016] 作為本公開的實施方式,僅以示例性而非限制性的方式提供了附圖,其中:
[0017] 圖1是示出包含四個數(shù)據(jù)元素和五個空陣列單元的存儲單元陣列的示意圖;
[0018] 圖2是示出包含到外部數(shù)據(jù)元素的四個引用和五個空陣列單元的存儲單元陣列 的不意圖;
[0019] 圖3是示出將彈性陣列從長度B調(diào)整(增大)到長度L的示意圖;
[0020] 圖4是示出將來自舊的陣列的元素重映射到新的陣列后陣列元素的大小和位置 的不意圖;以及
[0021] 圖5是示出彈性陣列中的數(shù)據(jù)元素和對應(yīng)的索引散列元素的示意圖。
[0022] 應(yīng)當(dāng)認(rèn)識到,這些圖中的一些或全部是示例性的示意圖,因此,這些圖并不一定反 映示出的元素的實際相對大小或位置。這些圖為了清晰地說明一個或多個實施方式的目的 而給出,并不用來限制以下給出的權(quán)利要求的范圍或含義。
【具體實施方式】
[0023] 本公開提供了采用用于快速數(shù)據(jù)訪問和存儲的排序的陣列的計算機(jī)系統(tǒng)和方法。 如上所述,更新傳統(tǒng)的排序的陣列是成本高的,這是因為根據(jù)新的元素應(yīng)當(dāng)所要插入的位 置,插入每個新的元素需要對陣列中現(xiàn)有元素的大約一半進(jìn)行移動。然而,在一個實施方式 中,本發(fā)明的技術(shù)提供了分配比其所存儲的元素所需要的空間更多的空間(即陣列中的位 置或單元)的排序的陣列。也就是說,該陣列在元素之間留下空的空間,使得插入新的元素 需要移動少量現(xiàn)有元素或者甚至不移動現(xiàn)有元素。由于這樣的陣列能夠容納新的元素而不 需要在每次插入時都增加其大小,因此該陣列也被稱為"排序
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1