第2章 算法分析基礎

2-1 算法的時間復雜度分析

2.1.1 輸入規模與基本語句

  • 輸入規模:算法處理數據的規模,通常用 n 表示。

  • 基本語句:執行次數與輸入規模直接相關的關鍵操作。

  • 例2.1 順序查找

    int SeqSearch(int A[], int n, int k) {  for (int i = 0; i < n; i++)  if (A[i] == k) break;  if (i == n) return 0;  else return (i + 1);  
    }
    
    • 輸入規模 n;基本語句是“比較 A[i] == k”

2.1.2 漸近分析

  • 大 O、大 Ω、大 Θ

    • T(n)=O(f(n)):? c, n?, ? n ≥ n?, T(n) ≤ c·f(n)

    • T(n)=Ω(f(n)):? c, n?, ? n ≥ n?, T(n) ≥ c·f(n)

    • T(n)=Θ(f(n)):同時滿足 O(f(n)) 和 Ω(f(n))

  • 例:若 T(n) ≤ 100n + n 則 T(n)=O(n)

    • 取 n?=5, c=101, 則 ? n ≥ 5, T(n) ≤ 101n → O(n)

  • 常見增長階
    1 < log n < n < n log n < n2 < n3 < … < 2? < n!

  • 例2.4 合并算法

    void Union(int A[], int n, int B[], int m, int C[]) {int i=0, j=0, k=0;while (i<n && j<m) {if (A[i] <= B[j]) C[k++] = A[i++];else C[k++] = B[j++];}while (i<n) C[k++] = A[i++];while (j<m) C[k++] = B[j++];
    }
    
    • 時間復雜度 O(n + m)

2.1.3 最好、最壞和平均情況

  • 當算法執行代價依賴于不同輸入時,需要分別分析:

    • 最好情況:最少操作次數;

    • 最壞情況:最多操作次數;

    • 平均情況:所有輸入實例上的平均操作次數。

  • 順序查找例

    • 最好:第1個元素即中,比較1次;

    • 最壞:未找到或在末尾,比較n次;

    • 平均:約(n + 1)/2次


2-2 算法的空間復雜度分析

  • 空間復雜度 = 輸入/輸出數據占用 + 算法本身占用 + 輔助空間

    1. 輸入/輸出數據:題目本身的數據結構;

    2. 算法本身:局部變量、常量,通常為 O(1);

    3. 輔助空間:臨時數組、遞歸棧等。

  • 示例

    • CommonFactor 求最大公約數:僅用常數級局部變量,O(1);

    • BubbleSort:只用固定數量的索引和臨時變量,O(1);

    • Merge:需要長度為 n 的臨時數組,O(n)。


2-3 算法的實驗分析

  • 實驗分析:將算法實現為程序,上機運行,實際測算時空開銷

  • 常用度量方法

    1. 計數法:插入計數器,記錄關鍵語句執行次數;

    2. 計時法:記錄程序段開始和結束時間,計算時間差。

  • 例 BubbleSort 實驗

    void BubbleSort(int r[], int n) {int j, temp, count1=0, count2=0, bound, exchange=n-1;while (exchange != 0) {bound = exchange; exchange = 0;for (j = 0; j < bound; j++)if (++count1 && r[j] > r[j+1]) {temp = r[j]; r[j] = r[j+1]; r[j+1] = temp;count2 += 3; exchange = j;}}cout<<"比較次數="<<count1<<",移動次數="<<count2<<endl;
    }
    
    • 目的:統計比較次數和移動次數

  • Collatz 過程實驗

    • 規則:n 為奇數 → 3n+1,否則 → n/2,直到 n=1;

    • 例 n=9:{9,28,14,…,1};

    • 例 n=27:77步到9232,再32步到1。


2-4 拓展與演練:最優算法與下界

  • 下界 Ω 表示法
    若 ? c, n?, ? n ≥ n?, T(n) ≥ c·g(n),則 T(n)=Ω(g(n)),g(n) 是問題的時間下界

  • 最優算法
    如果問題已知下界 g(n),且算法滿足 T(n)=Θ(g(n)),則該算法為最優。

  • 例2.10 最小值算法

    int ArrayMin(int a[], int n) {int min = a[0];for (int i = 1; i < n; i++)if (a[i] < min) min = a[i];return min;
    }
    
    • 比較次數下界 Ω(n),算法時間 O(n),故為最優。

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

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

相關文章

QT高級(1)QTableView自定義委托集合,一個類實現若干委托

自定義委托集合 1同系列文章2 功能3 源碼 1同系列文章 QT中級&#xff08;1&#xff09;QTableView自定義委托&#xff08;一&#xff09;實現QSpinBox、QDoubleSpinBox委托 QT中級&#xff08;2&#xff09;QTableView自定義委托&#xff08;二&#xff09;實現QProgressBar委…

webrtc 視頻直播

webrtc 是一種開源的音視頻通信技術&#xff0c;可以不借助中間媒介建立瀏覽器點對點&#xff08;peer-to-peer&#xff09;連接&#xff0c;實現音視頻以及其他數據的傳輸。webrtc具有平臺兼容性&#xff0c;低延遲與高實時的優點。今天主要記錄一下webrtc的使用記錄&#xff…

游戲引擎學習第261天:切換到靜態幀數組

game_debug.cpp: 將ProfileGraph的尺寸初始化為相對較大的值 今天的討論主要圍繞性能分析器&#xff08;Profiler&#xff09;以及如何改進它的可用性展開。當前性能分析器已經能夠正常工作&#xff0c;但我們希望通過一些改進&#xff0c;使其更易于使用&#xff0c;特別是在…

three.js設置物體輪廓發光和物體發光

設置物體輪廓發光 <script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js; // 導入后期合成 import { EffectComposer } from three/examples/jsm/postprocessing/EffectComposer.js; import { RenderPas…

homebrew安裝配置Python(MAC版)

Mac系統自帶python路徑為: /System/Library/Frameworks/Python.framework/Versionbrew 安裝 Python3 在終端輸入以下命令&#xff1a; brew search python3 # 查看支持安裝的版本 brew install python3就可以輕松easy安裝python了&#xff0c;安裝完成后提示 查看 pyth…

如何建設網站?網站建設簡單步驟有哪些?

新手如何開展網站建設&#xff1f;網站建設包括哪些步驟&#xff1f; 在開展網站建設之前先清楚了解網站建設的流程和步驟&#xff1a;注冊域名、租用虛擬主機/服務器、建站工具的選取、網站建設流程詳細流程共計7步&#xff0c;分別是注冊域名、域名實名制、服務器或虛擬主機、…

當K8S容器沒有bash時高階排查手段

遇到容器沒有bash甚至沒有sh的情況&#xff0c;就像被困在沒有門窗的房間。但真正的K8S運維高手&#xff0c;即使面對這種情況也能游刃有余。 一、無Shell容器三大特征 極簡主義&#xff1a;移除所有非必要組件&#xff08;如/bin/sh&#xff09;安全加固&#xff1a;減少攻擊…

Python案例實戰《手勢識別》

目錄 1、效果圖2、手勢識別關鍵步驟&#xff08;1&#xff09; 導入必要的庫&#xff08;2&#xff09;配置 MediaPipe&#xff08;3&#xff09;啟動攝像頭&#xff08;4&#xff09;設置手指張開判斷的距離閾值&#xff08;5&#xff09;計算手指之間的歐幾里得距離&#xff…

5G賦能農業物聯網:智能化種植的新紀元

5G賦能農業物聯網&#xff1a;智能化種植的新紀元 在農業領域&#xff0c;精準化、智能化已成為現代農業發展的方向。而5G的出現&#xff0c;讓農業物聯網&#xff08;Agri-IoT&#xff09;突破了傳統的瓶頸&#xff0c;真正實現了實時監測、高效數據傳輸、智能化決策&#xf…

VIVADO IP核整理(二)——FFT

目錄 IP 核配置IP 核接口s_axis_config_tdata 配置輸入輸出端口描述 仿真 參考&#xff1a;FFT IP核 詳細介紹 參考&#xff1a;官方文檔介紹 IP 核配置 在 IP Catalog 中搜索&#xff1a;Fast Fourier Transform 按照上圖所示進行配置&#xff0c;下文對配置內容進行詳述。 …

【計算機基礎】任意進制轉換方法詳解

文章目錄 一、通用進制轉換(整數部分)1. R進制轉十進制(整數)2. 十進制轉R進制(整數)二、通用進制轉換(小數部分)1. 十進制小數轉R進制2. R進制小數轉十進制三、二進制與十進制互轉(整數部分)1. 二進制轉十進制(整數)2. 十進制轉二進制(整數)四、二進制與十進制互…

鼠標交互初體驗:點擊屏幕生成彩色氣泡(EGE 庫基礎)

在圖形編程領域&#xff0c;實現與用戶的交互是讓程序變得生動有趣的關鍵環節。對于初學者來說&#xff0c;使用合適的圖形庫能大幅降低開發難度&#xff0c;快速實現創意想法。EGE 庫作為一款簡單易用且功能強大的 C/C 圖形庫&#xff0c;特別適合新手入門圖形交互編程。本文將…

Office 三大組件Excel、Word、Access 里 VBA 區別對比

以下是Excel、Word和Access在VBA中的主要區別對比及詳細說明: 核心對象模型 Excel Workbook(工作簿)→ Worksheet(工作表)→ Range(單元格區域) 核心圍繞單元格數據處理,如 Cells(1,1).Value = "數據" Word Document(文檔)→ Range(文本范圍)→ Paragrap…

【上位機——MFC】對象和控件綁定

對象和控件綁定 將控件窗口和類對象綁定具有兩大作用 如果和數據類對象綁定&#xff0c;對象和控件可以進行數據交換。 如果和控件類對象綁定&#xff0c;對象就可以代表整個控件。 與數據類型對象綁定的使用 數據類型對象和控件可實現數據交互重寫父類成員虛函數DoDataExch…

Excel處理控件Aspose.Cells教程:壓縮Excel文件完整指南

Excel 電子表格是管理、分析和可視化數據的有效工具&#xff0c;但隨著文件復雜度的增加&#xff0c;它們很快就會變得臃腫。無論是由于數據集龐大、嵌入圖片、格式過多還是隱藏工作表&#xff0c;Excel 文件的大小都可能迅速膨脹&#xff0c;導致打開速度變慢、難以通過電子郵…

軟考【軟考高級QA】

軟考高級QA 1.操作系統管理和調度進程時&#xff0c;有哪些狀態&#xff1f;&#xff08;5種&#xff09;2.操作系統管理和調度進程時&#xff0c;會進行哪些狀態轉換&#xff1f; 1.操作系統管理和調度進程時&#xff0c;有哪些狀態&#xff1f;&#xff08;5種&#xff09; …

神經網絡基礎-從零開始搭建一個神經網絡

一、什么是神經網絡 人工神經網絡&#xff08;Articial Neural Network&#xff0c;簡寫為ANN&#xff09;也稱為神經網絡&#xff08;NN),是一種模仿生物神經網絡和功能的計算模型&#xff0c;人腦可以看做是一個生物神經網絡&#xff0c;由眾多的神經元連接而成&#xff0c;…

Golang 接口 vs Rust Trait:一場關于抽象的哲學對話

一、引言 在現代編程語言中&#xff0c;接口&#xff08;Interface&#xff09; 和 Trait 是實現多態和抽象行為的關鍵機制。它們允許我們定義行為契約&#xff0c;讓不同的類型共享相同的語義接口&#xff0c;從而提升代碼的復用性和擴展性。 Go 和 Rust 分別代表了兩種截然…

java實現一個操作日志模塊功能,怎么設計

為了設計一個高效、可靠且可擴展的操作日志模塊&#xff0c;可以結合 ?AOP&#xff08;面向切面編程&#xff09;?、異步處理?&#xff08;多線程或MQ&#xff09;以及合理的存儲策略&#xff0c;具體方案如下&#xff1a; ?1. 技術選型與架構設計? ??(1) AOP 實現非侵…

【論文閱讀】HunyuanVideo: A Systematic Framework For Large Video Generative Models

HunyuanVideo: A Systematic Framework For Large Video Generative Models 原文摘要 研究背景與問題 視頻生成的變革性影響&#xff1a;近期視頻生成技術的進步深刻改變了個人生活與行業應用。 閉源模型的壟斷&#xff1a;主流視頻生成模型&#xff08;如Runway Gen-3、Luma …