【Python數據結構與算法】—— 搜索算法 | 期末復習不掛科系列

?

🌈個人主頁:?Aileen_0v0
🔥系列專欄:?數據結構與算法
💫個人格言:"沒有羅馬,那就自己創造羅馬~"


這篇博客主要探索的是計算機科學常見問題---搜索算法

“時間緊,任務重!”

話不多說,開始今天的學習之旅吧?~


目錄

搜索

定義

關鍵字-in

順序搜索?

無序表的順序搜索過程

無序表的順序搜索代碼實現?

分析順序搜索算法

有序列表

有序列表的順序搜索過程?編輯

無序表的順序搜索代碼實現?


搜索

定義

搜索是指從元素集合中找到特定元素算法過程

搜索過程通常返回True 或 False 來表示元素是否在集合中。

有時也可以修改搜索過程,使它返回目標元素的位置。

為了更好的打好算法基礎,我們這次先探索搜索的元素是否存在這一問題。


關鍵字-in

in是Python中的關鍵字,用于判斷一個元素是否存在于一個容器中。可以用于列表、元組、字典、集合等數據類型。它可以被用于for循環語句 和 if語句中。

我們之前做Python每日一練時我曾科普過Python中 我們可以通過運算符 —— in 去檢查元素是否在列表中。

print(15 in [1,2,3])
print(15 in [1,2,3,15])

運行結果:?


順序搜索?

線性結構(數組、鏈表、棧、隊列等)都有下標。每個數據項都有一個相對于其它數據項的位置。

Python的列表 ,數據項的位置就是其下標。

因為下標有序的,So 我們能夠進行 順序訪問順序搜索

無序表的順序搜索過程

下圖展示了順序搜索的過程。

無序表的順序搜索代碼實現?

def sequential_search(a_list,item):pos = 0while pos < len(a_list):if a_list[pos] == item:return  Truepos += 1return  Falseprint(sequential_search([1,2,4,5,9],5))

從列表第一個元素開始, 沿著下表順序逐個查看,直到找到目標元素或者到達列表末尾。

若查完列表后仍未找到目標元素,則說明目標元素不在列表中。

分析順序搜索算法

分析搜索算法前,首先需要先定義 計算的基本單元---解決問題過程中不斷重復的的某一步

對搜索來說,記錄 比較的次數 是合理的 性能指標。

每次比較只有兩個結果: 找到目標元素,或未找到。

假設元素排列無序,則目標元素在每一個位置出現的可能都相同。

確定目標元素是否在列表中,唯一的方法就是將它與列表中的每個元素都比較一次

列表中有n個元素,那么順序搜索經過 n 次比較后才能確定目標元素不在列表中。如果列表含目標元素,分析起來更復雜。實際上有 3 種可能的情況:

最好情況目標元素位于列表的第一個位置,則只需比較一次;

最壞情況目標元素位于最后一個位置,則需要比較 n次

平均情況目標元素位于中間位置,則需要比較 n / 2次。 --> 當n增大,系數則可省略,所以順序搜索時間復雜度O(n)


有序列表

有序列表的順序搜索過程

通過觀察上圖有序列表列表中的順序搜索過程我們可以得出以下結論:

元素按升序排列

如果存在目標元素,那么它出現在 n個位置中任意一個位置的可能性仍然一樣大,因此比較次數與在無序列表相同

But,如果不存在目標元素,那么搜索效率就會提高。---> 因為當找到比目標元素大的數的時候程序就會停止搜索

無序表的順序搜索代碼實現?

#有序表的順序搜索
def ordered_sequential_search(a_list,item):pos = 0while pos < len(a_list):if a_list[pos] == item:return Trueelif a_list[pos] > item:return Falsepos += 1return False
print(ordered_sequential_search([1,2,4,5,9],6))

下表總結了,在有序表中搜索時的比較次數。

最好情況:只需比較1次。? 平均情況比較 n / 2 次,但時間復雜度仍是O(n)。

總結:只有當列表不存在目標元素時,有序排列的元素,才能提高順序搜索的效率

📝總結:

本篇文章介紹了搜索算法以及,有序列表在搜索算法中 的優勢,前提條件是:只有當元素不在列表中時有序排列的元素,才能提高順序搜索的效率

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

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

相關文章

HarmonyOS--ArkTS(0)--目錄

官方API文檔&#xff1a; HarmonyOS應用開發官網 - 華為HarmonyOS打造全場景新服務 華為開發者官方網站_創新從這里開始

MySQL的鎖機制

1.簡介 MySQL的隔離性是由鎖機制來保證的。鎖是計算機協調多個進程或線程并發地訪問某一資源你的機制。當多線程并發地訪問某個數據時&#xff0c;尤其是在涉及金錢等安全敏感性數據的時候&#xff0c;需要保證數據在任意時刻最多只有一個線程可以對其進行修改&#xff0c;從而…

Android 分享小結

關于作者&#xff1a;CSDN內容合伙人、技術專家&#xff0c; 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 &#xff0c;擅長java后端、移動開發、商業變現、人工智能等&#xff0c;希望大家多多支持。 目錄 一、導讀二、微信 分享 三、 QQ 、QQ空間&#xff08;Qz…

MATLAB基礎運算

矩陣和數字相乘 就是矩陣里面每個元素跟這個數字乘一遍&#xff0c;無論是點乘還是叉乘&#xff0c;對于這個都一樣。 >> Aones(3) A 1 1 11 1 11 1 1 >> 10*A ans 10 10 1010 10 1010 10 10 矩陣和矩陣叉乘 能不能相…

C++普通函數與函數模板的調用規則

調用規則 如果函數模板和普通函數都可以實現&#xff0c;優先調用普通函數可以通過空模板參數列表來強制調用函數模板函數模板也可以重載如果函數模板可以產生更好的匹配&#xff0c;優先調用函數模板 總結&#xff1a;既然提供了函數模板&#xff0c;最好就不要提供普通函數…

CSS 如何居中 DIV

如何居中 div&#xff1f; 水平居中&#xff1a;給 div 設置一個寬度&#xff0c;然后添加 margin:0 auto 屬性 div {width: 200px;margin: 0 auto; }水平居中&#xff0c;利用 text-align:center 實現 .container {background: rgba(0, 0, 0, 0.5);text-align: center;font…

基于ssm鐵嶺河醫院醫患管理系統論文

摘 要 21世紀的今天&#xff0c;隨著社會的不斷發展與進步&#xff0c;人們對于信息科學化的認識&#xff0c;已由低層次向高層次發展&#xff0c;由原來的感性認識向理性認識提高&#xff0c;管理工作的重要性已逐漸被人們所認識&#xff0c;科學化的管理&#xff0c;使信息存…

logback的使用

1 logback概述 SLF4J與其它日志組件調用關系圖如下所示。 SLF4J&#xff0c;即Java中的簡單日志門面&#xff08;Simple Logging Facade for Java&#xff09;&#xff0c;不是具體的日志解決方案&#xff0c;它只服務于各種各樣的日志系統。 SLF4J最常用的日志實現框架是&am…

2023 CCF中國軟件大會(CCF ChinaSoft) “區塊鏈可靠性分析”論壇成功召開

2023年12月1日上午&#xff0c;2023年度CCF中國軟件大會區塊鏈可靠性分析論壇成功召開。 本次論壇由中山大學鄭子彬、澳門科技大學張濤、中科院軟件所蔡彥和中山大學陳嘉弛四位老師聯合組織舉辦。本論壇重點關注區塊鏈可靠性&#xff0c;邀請了近年來在區塊鏈可靠性研究方面有先…

【postgresql】ERROR: INSERT has more expressions than target columns

執行下面sql insert into apply_account_cancellation3 select * from pply_account_cancellation; 返回下面錯誤信息 insert into apply_account_cancellation3 select * from apply_account_cancellation > ERROR: INSERT has more expressions than target colu…

【Rust】第二節:入門(如入)

1 說明 包含"Hello, world!“以及"Hello, cargo!” 環境&#xff1a;MacOS 2 Hello world 2.1 運行 1、建一個目錄 2、用vscode打開 3、新建文件main.js 4、輸入 fn main(){println!("Hello, world!"); }5、打開終端&#xff0c;執行rustc main.rs 6、…

Java:字節流 文件輸出與讀入方法 并 實現文件拷貝

文章目錄 字節 流FileOutputStream換行 與 續寫FileInputstream實現 文件拷貝&#xff08;字節數組 讀入方法&#xff09;字節流 編碼 字節 流 FileOutputStream 創建對象&#xff0c;指定位置&#xff08;產生數據傳輸通道&#xff09; 參數可以是File對象&#xff0c;也可以…

特征驅動開發

FDD 方法來自于一個大型的新加坡銀行項目。FDD 的創立者 Jeff De Luca 和 Peter Coad 分別是這個項目的項目經理和首席架構設計師。在 Jeff 和 Peter 接手項目時&#xff0c;客戶已經經歷了一次項目的失敗&#xff0c;從用戶到高層都對這個項目持懷疑的態度&#xff0c;項目組士…

mysql面試題——日志

一&#xff1a;為什么需要REDO日志 緩沖池可以幫助我們消除CPU和磁盤之間的鴻溝&#xff0c;checkpoint機制可以保證數據的最終落盤&#xff0c;然而由于checkpoint 并不是每次變更的時候就觸發 的&#xff0c;而是master線程隔一段時間去處理的。所以最壞的情況就是事務提交后…

持續集成交付CICD:Jenkins配置Nexus制品發布

目錄 一、實驗 1.Jenkins配置Nexus制品發布 一、實驗 1.Jenkins配置Nexus制品發布 &#xff08;1&#xff09;策略 發布其實就是下載制品&#xff0c;然后將制品發送到目標主機&#xff0c;最后通過腳本或者指令啟動程序。 &#xff08;2&#xff09;安裝Maven Artifact …

前端知識(十一)———js判斷上傳的文件是GBK編碼還是UTF-8

1、獲取文件二進制數據&#xff0c;這里只做示例&#xff0c;例如element-ui中文件上傳的beforeUpload方法&#xff0c;返回的file對象&#xff0c;然后使用FileReader對其進行轉換&#xff0c;再進行后續判斷 function beforeUpload(file: File) { const reader new FileRe…

uniapp圖片預覽

用的是Uview組件庫里面的 直接在頁面寫上&#xff1a; <u-album singleSize"100" :urls"[https://lxt.jingyi.icu/item.img]"></u-album> 這圖片路徑是我自己的 你們可以按照組件庫里面的方法去實現

DataFrame的使用

查看數據類型及屬性 # 查看df類型 type(df) # 查看df的shape屬性&#xff0c;可以獲取DataFrame的行數&#xff0c;列數 df.shape # 查看df的columns屬性&#xff0c;獲取DataFrame中的列名 df.columns # 查看df的dtypes屬性&#xff0c;獲取每一列的數據類型 df.dtypes df.i…

標準成本核算基礎知識 – 了解間接費用成本流程 - Part4

原文地址&#xff1a;Basics of Standard Costing – Understanding overhead cost flow-Part 4 | SAP Blogs 這是我理解標準成本計算及其流程的另一篇文檔的延續。 標準成本核算基礎知識 - 了解成本構成結構 - 第 3 部分 管理費用是只能間接歸因于產品的成本&#xff0c;例如…

react中使用react-konva實現畫板框選內容

文章目錄 一、前言1.1、API文檔1.2、Github倉庫 二、圖形2.1、拖拽draggable2.2、圖片Image2.3、變形Transformer 三、實現3.1、依賴3.2、源碼3.2.1、KonvaContainer組件3.2.2、use-key-press文件 3.3、效果圖 四、最后 一、前言 本文用到的react-konva是基于react封裝的圖形繪…