大話數據結構——查找

查找(Searching)是根據給定的某個值,在查找表中確定一個其關鍵字等于給定值的數據元素(或記錄)。

一、順序表查找

順序查找又叫線性查找,是最基本的查找技術,它的查找過程是:從表中第一個(或最后一個)記錄開始,逐個記性記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查找陳宮,找到所查的記錄;如果直到最后一個(或第一個)記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查找不成功。
時間復雜度為O(n)。

二、有序表查找

(一)折半查找
折半查找又稱二分查找。它的前提是線性表中的記錄必須是關鍵碼有序(通常是從小到大有序),線性表必須采用順序存儲。
折半查找的基本思想是:在有序表中,取中間記錄作為比較對象,若給定值與中間記錄的關鍵字相等,則查找成功;若給定值小于中間記錄的關鍵字,則在中間記錄的左半區繼續查找;若給定值大于中間記錄的關鍵字,則在中間記錄的右半區繼續查找。不斷重復上述過程,直到查找成功,或所有查找區域無記錄,查找失敗為止。
時間復雜度為O(logn)

(二)插值查找
插值查找的關鍵是根據要查找的關鍵字key與查找表中最大最小記錄的關鍵字比較后的查找方法,其核心就在于插值的計算公式(key-a[low])/(a[high]-a[low])。
從時間復雜度上看,它也是O(logn),但對于表長比較大,而關鍵字分布又比較均勻的查找表來說,插值查找算法的平均性能比這般查找要好很多。

(三)斐波那契查找

三、線性索引查找

索引是把一個關鍵字與它對應的記錄相關聯的過程。一個索引由若干個索引構成,每個索引項至少應包含關鍵字和其對應的記錄在存儲器中的位置等信息。
線性索引是將索引項集合組織委員線性結構,稱為索引表。 以下重點介紹三種線性索引:稠密索引、分塊索引、倒排索引。

(一)稠密索引
稠密索引是指在線性索引中,將數據集中的每個記錄對應一個索引項。
稠密索引要應對的可能是成千上萬的數據,因此對于稠密索引這個索引表來說,索引項一定是按照關鍵碼有序的排列。

(二)分塊索引
例子:圖書館藏書。
分塊有序,是把數據集的記錄分成了若干塊,將每塊對應一個索引項,并且這些塊需要滿足:
(1)塊內無序,即每一塊內的記錄不要求有序。當然,你如果能夠讓塊內有序對查找來說更理想,不過這就要付出大量時間和空間代價,因此通常我們不要求快內有序。
(2)塊間有序,例如,要求第二塊所有記錄的關鍵字均要大于第一塊中所有記錄的關鍵字,第三塊所有記錄的關鍵字均要大于第二塊的所有記錄關鍵字……因為只有塊間有序,才有可能在查找時帶來效率。
分塊索引的索引項結構分為三個數據項:
(1)最大關鍵碼,存儲每一塊中的最大關鍵字;
(2)存儲了塊中的記錄個數,以便循環時用;
(3)用于指向塊首數據元素的指針,便于開始對這一塊中記錄進行遍歷。
分塊索引

(三)倒排索引
網頁搜索一般用的就是倒排索引。
倒排索引的通用結構是:

  • 次關鍵碼(如“英文單詞”)
  • 記錄號表(如“文章編號”)

記錄號表存儲具有相同次關鍵字的所有記錄的記錄號(可以是指向記錄的指針或者是該記錄的主關鍵字)
倒排索引

四、二叉排序樹

二叉排序樹又稱為二叉查找樹。它或者是一棵空樹,或者是具有下列性質的二叉樹。

  • 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結構的值;
  • 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結構的值;
  • 它的左、右子樹也分別為二叉排序樹。
    按中序遍歷它是棵有序樹。

五、平衡二叉樹(AVL樹)

平衡二叉樹,是一種二叉排序樹,其中每一個結點的左子樹和右子樹的高度差至多等于1。
平衡二叉樹

六、多路查找樹(B樹)

多路查找樹,其每一個結點的孩子書可以多于兩個,且每一個結點處可以存儲多個元素。

(一)2-3樹
2-3樹是一棵多路查找樹:其中的每一個結點都具有兩個孩子(稱為2結點)或三個孩子(稱為3結點)。
一個2結點包含一個元素和兩個孩子(或沒有孩子)。
一個3結點包含一小一大兩個元素和三個孩子(或沒有孩子)。
2-3樹

(二)2-3-4樹
2-3-4樹是2-3樹的擴展,包括了4個結點的使用。一個結點包含小中大三個元素和四個孩子(或沒有孩子)。

(三)B樹
B樹是一種平衡的多路查找樹,2-3樹和2-3-4樹都是B樹的特例。結點最大的孩子數目稱為B樹的階,因此,2-3樹是3階的B樹,2-3-4樹是4階的B樹。

(四)B+樹

七、散列表查找(哈希表)概述

散列技術是在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關系f,使得每個關鍵字key對應一個存儲位置f(key)。查找時,根據這個確定的對應關系找到給定值key的映射f(key),若查找集合中存在這個記錄,則必定在f(key)的位置上。
我們把上述的對應關系f稱為散列函數,又稱為哈希函數。采用散列技術將記錄存儲在一塊連續的存儲空間中,這塊連續存儲空間稱為散列表后哈希表。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386034.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【工作經驗分享】java圖片轉文字

前言 又到一年金九銀十之際。 Java作為目前用戶最多,使用范圍最廣的軟件開發技術之一。 Java的技術體系主要由支撐Java程序運行的虛擬機,提供各開發領域接口支持的Java,Java編程語言及許多第三方Jvav框架構成。 其中,以Java的虛擬器為今天的著…

數據挖掘工程師的面試問題與答題思路

一個Java程序可以認為是一系列對象的集合,而這些對象通過調用彼此的方法來協同工作。下面簡要介紹下類、對象、方法和實例變量的概念。 對象:對象是類的一個實例,有狀態和行為。例如,一條狗是一個對象,它的狀態有&…

【干貨】java課程實戰培訓

開頭 消息隊列 RocketMQ 是阿里巴巴集團基于高可用分布式集群技術,自主研發的云正式商用的專業消息中間件,既可為分布式應用系統提供異步解耦和削峰填谷的能力,同時也具備互聯網應用所需的海量消息堆積、高吞吐、可靠重試等特性,…

Java的幾個特點

Java語言是簡單的: Java語言的語法與C語言和C語言很接近,使得大多數程序員很容易學習和使用。另一方面,Java丟棄了C中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換。特別地&#xff0c…

【干貨】mysql建表語句注釋

前言 難道程序員的職業生命線是青春飯?答案是的。 35歲考慮轉行,然后35歲又成了一個新人,而外國可以做到60歲,啥也不說了,可能是覺得中年大叔油膩,不及小鮮肉便宜,唉,可嘆市場更新…

軟件測試知識整理

在一個測試計劃匯總能包含哪些內容? 答:在一個測試計劃中可以包含需要測試的產品的特點和主要功能模塊,列出需要測試的功能點,并標明側重點;測試的策略和記錄(測試工具的確認,測試用例等文檔模…

【干貨】mysql查詢重復數據sql

前言 本系列的目的是明明白白、徹徹底底的搞定日期/時間處理的幾乎所有case。上篇文章鋪設所有涉及到的概念解釋,例如GMT、UTC、夏令時、時間戳等等,若你還沒看過,不僅強烈建議而是強制建議你前往用花5分鐘看一下,因為日期時間處…

【微信小程序】java最簡單觀察者模式

開頭 對于一個Java程序員而言,能否熟練掌握并發編程是判斷他優秀與否的重要標準之一。因為并發編程是Java語言中最為晦澀的知識點,它涉及操作系統、內存、CPU、編程語言等多方面的基礎能力,更為考驗一個程序員的內功。 那到底應該怎么學習并…

操作系統知識點整理

作業 用戶在一次解題或一個事務處理過程中要求計算機系統所做工作的集合。它包括用戶程序、所需要的數據及控制命令等。作業是由一系列有序的步驟組成的。 進程 一個程序在一個數據集合上的一次運行過程。所以一個程序在不同數據集合上運行,乃至一個程序在同樣數…

【性能優化實戰】java驗證碼識別訓練

前言 今天剛好有空,跟大家聊聊如何學好算法進大廠。 前兩天一個讀者和我說,他堅持刷算法題2個月,薪資翻番去了他夢寐以求的大廠,期間面字節跳動還遇到了原題…其實據我所知目前國內的大廠和一些獨角獸,已經越來越效仿…

計算機網絡知識整理

OSI七層 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。 物理層涉及信道上傳輸的比特流。 數據鏈路層的主要任務是加強物理層傳輸原始比特流的功能,是指對應的網路層顯現為一條無錯線路。發送包把數據封裝在數據幀,按順序傳送出去并處…

吸水間最低動水位標高_體驗長安逸動EV460:再也不用為電動車續駛里程焦慮了...

文| 車突突車圖騰出品,未經許可,謝絕轉載● ● ●人們都在期待碧水藍天,而且越來越多的消費者也開始踐行環保理念,在買車時關注起了純電動汽車。不過遺憾的是,純電動汽車目前還沒能成為主流。一方面,是因為…

java開發工具包jdk包括哪些

害怕干不過SpringBoot?莫慌,我送你套神級pdf文檔 隨著 Spring Boot 使用越來越廣泛,Spring Boot 已經成為 Java 程序員面試的知識點,很多同學對 Spring Boot 理解不是那么深刻,經常就會被幾個連環追問就給干趴下了&am…

微信計步器怎么不計步_難以關閉的微信朋友圈廣告

太難關掉了。”試圖關閉朋友圈廣告的小曾,在對照著騰訊視頻上的一個長達6分鐘的視頻演示之后,通過14次操作才得以關閉。這14步操作具體如下:點擊“我”—點擊“設置”—點擊“關于微信”—點擊“微信隱私保護指引”—下拉兩個屏幕的面積—點擊…

java開發工具有哪些

前言 Netty 是一款基于 Java 的網絡編程框架,能為應用程序管理復雜的網絡編程、多線程處理以及并發。Netty 隱藏了樣板和底層代碼,讓業務邏輯保持分離,更加易于復用。使用 Netty 可以得到一個易于使用的 API,讓開發人員可以專注自…

經典冒泡排序及其優化

經典排序算法 - 冒泡排序Bubble sort 原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣一趟過去后,最大或最小的數字被交換到了最后一位,然后再從頭開始進行兩兩比較交換,直到倒數第二位時結束,其余類似…

expdp導出 schema_記錄一則expdp任務異常處理案例

在XTTS遷移測試階段,遇到執行幾個expdp的導出任務,遲遲沒有返回任何信息,對應日志無任何輸出。環境:AIX 6.1 Oracle 10.2.0.4現象:在XTTS遷移測試階段,遇到執行幾個expdp的導出任務,遲遲沒有返…

java開發工具軟件排行榜

前言: 都說學歷是敲門磚,是一點都沒錯,即使是在重技術輕學歷的互聯網企業,面試官對于學歷越高的程序員初印象會更好,面試也會更順利,而大部分專科學歷的程序員,除非有過硬的技術,否…

簡單選擇排序算法

簡單選擇排序思想:首先,找到數組中最小的元素,其次,將它和數組第一個元素交換位置;再次,在剩下的元素中找到最小的元素,將它與數組中的第二個元素交換。如此亡故,直到將整個數組排序…

java開發工程師工作內容怎么寫

什么是分布式鎖?在回答這個問題之前,我們先回答一下什么是鎖。 普通的鎖,即在單機多線程環境下,當多個線程需要訪問同一個變量或代碼片段時,被訪問的變量或代碼片段叫做臨界區域,我們需要控制線程一個一個…