python數據結構和算法(1)

數據結構和算法簡介

數據結構:存儲和組織數據的方式,決定了數據的存儲方式和訪問方式。
算法:解決問題的思維、步驟和方法。
程序 = 數據結構 + 算法

算法

算法的獨立性

算法是獨立存在的一種解決問題的方法和思想,對于算法而言,實現的語言并不重要,重要的是思想,算法可以有不同的語言描述實現版本

算法的特點

  • 有輸入:算法具有0個或者多個輸入
  • 有輸出:算法至少有1個或者多個輸出
  • 有窮性:算法在有限的步驟之后會自動結束而不會無限循環,并且每一個步驟可以在可接受的時間內完成
  • 確定性:算法中的每一步都有確定的含義,不會出現二義性
  • 可行性:算法的每一步都是可行的,即每一步都能夠執行有限的次數完成

算法對比

對于同一個問題,我們給出了兩種解決算法,在兩種算法的實現中,我們對程序的執行時間進行了測算,發現兩段程序執行的時間相差懸殊,由此我們可以得出結論:實現算法程序的執行時間可以反映出算法的效率
但是,單靠時間值衡量算法效率并不可靠

假設計算機執行算法每一個基本操作的時間是固定的一個時間單位,那么有多少個基本操作就代表花費多少時間單位,由此可以忽略機器環境的影響而客觀的反應算法的時間效率

. 代碼執行總時間 ( T ) = 操作步驟數量 ? 操作步驟執行時間 .代碼執行總時間(T) = 操作步驟數量 * 操作步驟執行時間 .代碼執行總時間(T)=操作步驟數量?操作步驟執行時間

時間復雜度

時間復雜度表示一個蘇娜發隨著問題規模不斷變化的最主要趨勢,通常用來衡量一個算法的優劣

時間復雜度的表示形式

O 記法 為算法的時間復雜度隨數據量變化的關系曲線,通常由最高次項決定,當數據量比較高時低次項的影響相對于高次項就很小,為了方便可以忽略

時間復雜度的計算規則

  • 基本操作 時間復雜度為O(1)
  • 順序結構 時間復雜度按加法計算
  • 循環結構 時間復雜度按乘法計算
  • 分支結構 時間復雜度取最大值
  • 判斷一個算法的效率時,往往只需要關注操作數量的最高次項,其他次要項和常數項可以忽略
  • 在沒有特殊說明時,我們所分析的算法的時間復雜度都是指最壞時間復雜度

最優最壞時間復雜度

分析算法時,存在集中可能的考慮

  • 算法完成工作最少需要多少基本操作,即 最優時間復雜度
  • 算法完成工作最多需要多少基本操作,即 最壞時間復雜度
  • 算法完成工作平均需要多少基本操作,即 平均時間復雜度

最優最壞時間復雜度的作用

  • 最優時間復雜度:反映的知識最樂觀最理想的情況,沒有參考價值
  • 最壞時間復雜度:算法的一種保證,表示算法在此種程度的基本操作中一定能完成工作
  • 平均時間復雜度:是對蘇娜發的一個全面評價,因此它完整全面的反映了這個算法的性質,但另一方面,這種平衡并沒有保證,不是每個計算都能在這個基本操作內完成。而且,對于平均情況的計算,也會因為應用蘇娜發的實例分布可能并不均勻而難以計算。

我們主要關注算法的最壞情況,即最壞時間復雜度

常見的時間復雜度

  • O ( 1 ) O(1) O(1) 常數階
  • O ( l o g n ) O(logn) O(logn) 對數階
  • O ( n ) O(n) O(n) 線數階
  • O ( n 2 ) O(n^2) O(n2) 平方階
  • O ( n 3 ) O(n^3) O(n3) 立方階

效率高到低分別是
O ( 1 ) > O ( l o g n ) > O ( n ) > O ( n ? l o g n ) > O ( n 2 ) > O ( n 3 ) O(1) > O(logn) > O(n) >O(n * logn) > O(n^2) > O(n^3) O(1)>O(logn)>O(n)>O(n?logn)>O(n2)>O(n3)

空間復雜度

空間復雜度是對一個算法在運行過程中臨時占用存儲空間大小的度量,類似于時間復雜度。一個算法的空間復雜度 S ( n ) S(n) S(n) 定義為該算法所耗費的存儲空間

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

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

相關文章

Linux操作系統-性能優化

1. 基礎工具 top / htop top # 實時查看CPU、內存、進程 htop # 增強版(支持鼠標操作) 關鍵指標:%CPU(CPU占用)、%MEM(內存占用)、LOAD AVERAGE(系統負載&#…

如何徹底解決緩存擊穿、緩存穿透、緩存雪崩

一、緩存擊穿 成因:緩存擊穿通常發生在某個熱點數據失效或清空后,大量請求同時涌入后端數據庫,導致數據庫崩潰或宕機。 解決方案: 互斥鎖:在獲取數據時,使用分布式鎖(如Redis的分布式鎖&…

JDK 8、JDK 17和JDK 19綜合對比分析

JDK 8、JDK 17和JDK 19在性能、特性、易用性及普及性等方面的綜合對比分析,結合了各版本的核心改進和實際應用場景 目錄 ? 一、性能對比 ? 二、語言與特性演進 🛠? 三、API與功能增強 🎯 四、易用性改進 📊 五、市場普及…

Vue-理解 vuex

一、前言 在開發中大型 Vue 應用時,我們常常會遇到多個組件之間共享數據、通信復雜的問題。例如: 多個組件需要訪問同一個用戶信息;組件之間需要傳遞狀態或事件;數據變更需要同步更新多個組件; 這時,Vue…

【209】VS2022 C++對排好序的vector使用二分查找算法的例子

本文介紹了如何對已經排序的 vector 進行二分法查找。 首先&#xff0c;我們先看一下存儲數據的類&#xff0c;我們假設所有數據的 id 是唯一的&#xff1a; DataItem.h #pragma once #include<string>namespace zc {class DataItem{public:int m_id;std::string m_na…

ABAP 上傳 excel 報表

&#xff08;1&#xff09;先在屏幕上增加上傳文件的按鈕 "屏幕選擇條件" SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETERS : p_source LIKE rlgrap-filename . SELECTION-SCREEN END OF BLOCK b1. 你會發現&#xff0c;上面的代碼只…

Compose與View系統互操作方案

本文將全面解析 Android 現代 UI 框架 Jetpack Compose 與傳統 View 系統的互操作方案&#xff0c;涵蓋基礎原理、實戰技巧、性能優化和高級應用&#xff0c;助你實現漸進式遷移和混合開發。 一、互操作的必要性與整體架構 1.1 為什么需要互操作性 漸進式遷移&#xff1a;大型…

HNCTF 2025 Just Ping Write-up

part 1 路由部分主邏輯逆向 package mainimport ("net/http" )func main() {// 注冊路由和處理函數// 當訪問 "/api/ping" 路徑時&#xff0c;調用 pingHandler 函數處理請求http.HandleFunc("/api/ping", pingHandler)// 注冊開發測試API路由//…

OpenCV CUDA模塊中用于稠密光流計算的 TV-L1(Dual TV-L1)算法類cv::cuda::OpticalFlowDual_TVL1

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::cuda::OpticalFlowDual_TVL1類是基于變分優化方法的稠密光流算法實現&#xff08;Dual TV-L1 光流模型&#xff09;&#xff0c;在 GPU 上加…

ThreadPoolTaskExecutor+CompletableFuture實現多線程異步數據同步和自定義線程池監控和動態調整實現

前言 ThreadPoolTaskExecutor是Spring框架提供的一個線程池實現&#xff0c;它是對Java標準庫中ThreadPoolExecutor的封裝&#xff0c;提供了更便捷的配置和集成方式&#xff0c;特別適合在Spring環境中使用。相關線程池概念見線程&線程池相關 CompletableFuture 是 Java…

一篇文章理解js閉包和作用于原理

一、js閉包的作用原理 JS閉包是指內部函數訪問外部函數變量的機制&#xff0c;常用于數據封裝和模塊化。典型應用包括創建私有變量、解決循環中的異步問題、實現函數柯里化等。案例分析展示了閉包在計數器、防抖函數等場景的使用&#xff0c;同時揭示了可能的內存泄漏風險。正…

GUI絲滑教程-python tinker

在 Tkinter GUI 應用中&#xff0c;線程可以幫助你在后臺執行長時間運行的任務&#xff0c;而不阻塞界面響應。下面是一些技巧&#xff0c;幫助你在使用線程時避免 Tkinter 界面卡頓的問題。 為什么 Tkinter 界面會卡頓&#xff1f; Tkinter 使用 主線程 來處理 UI 更新&…

第一部分-數據通信網絡基礎

目錄 一、什么是網絡通信&#xff1f; 二、網絡通信設備的基本識別 1.雙絞線 2.集線器&#xff08;物理層設備&#xff09; 3.中繼器&#xff08;物理層設備&#xff09; 4.接入交換機 5.匯聚交換機 6.核心交換機 7.路由器 8.無線路由器 9.光貓 一、什么是網絡通信&#xff1f;…

windows電腦解決筆記本搜索不到wifi問題

windows筆記本電腦明明打開了wifi功能&#xff0c;卻搜索不到wifi&#xff0c;此問題可能是網絡適配器被禁用的原因導致&#xff0c;通過以下方法也許能解決&#xff0c;無需重啟電腦 1、右鍵點擊網絡或wifi圖標&#xff0c;打開界面”網絡和internet“ 2、選擇”高級網絡設置…

C# 界面檢測顯示器移除并在可用顯示器上顯示

C# 檢測顯示器被移除&#xff0c;將界面在當前可用的顯示器上顯示&#xff0c;避免程序在任務欄點擊無響應。 using System; using System.Linq; using System.Windows.Forms;public class MonitorWatcher : IDisposable {private readonly Form _targetForm;private Screen …

JAVA實戰開源項目:青年公寓服務平臺 (Vue+SpringBoot) 附源碼

本文項目編號 T 233 &#xff0c;文末自助獲取源碼 \color{red}{T233&#xff0c;文末自助獲取源碼} T233&#xff0c;文末自助獲取源碼 目錄 一、系統介紹二、數據庫設計三、配套教程3.1 啟動教程3.2 講解視頻3.3 二次開發教程 四、功能截圖五、文案資料5.1 選題背景5.2 國內…

阿里云服務狀態監控:實時掌握云服務健康狀況

前言 在云計算時代,企業和開發者越來越依賴云服務提供商的基礎設施和服務。當我們的應用部署在云上,服務的可用性和穩定性就與云服務提供商息息相關。一旦云服務出現故障或維護,可能會對我們的業務造成直接影響。因此,實時了解云服務的運行狀態變得尤為重要。阿里云作為國…

使用VSCode開發FastAPI指南

1概述 FastAPI 是一個現代的高性能 Web 框架&#xff0c;用于使用 Python 構建 API。它旨在讓開發者輕松快速高效地構建 API&#xff0c;同時提供 API 的自動驗證、序列化和文檔記錄等功能&#xff0c;使其成為構建 Web 服務和微服務的熱門選擇。 在這個 FastAPI 教程中&#…

2025年硬件實習/秋招面試準備

前言 暑期即將到來&#xff0c;有很多研一研二以及大三大四的同學準備硬件類&#xff08;硬件研發、嵌入式硬件、layout、電源設計、射頻、硬件測試、工藝、FAE&#xff09;的實習或秋招。鑒于此&#xff0c;總結一下網友們秋招、實習中的硬件高頻考點&#xff0c;并分析他們是…

VSCode - Trae 插件關閉彈出框代碼補全

Trae 插件關閉彈出框代碼補全 彈出框代碼補全與非彈出框代碼補全 如下是彈出框代碼補全 如下是非彈出框代碼補全 關閉 / 啟用彈出框代碼補全 點擊 【管理】&#xff08;小齒輪&#xff09; -> 點擊 【設置】 取消勾選&#xff08;如果需要啟用&#xff0c;則勾選即可&…