ChatGPT:為什么很多算法經過二分思想的優化就變成了logn

ChatGPT:為什么很多算法經過二分思想的優化就變成了logn



很多算法在經過二分思想優化后,時間復雜度變成 O(log?n),這主要是因為二分思想能夠顯著減少問題的規模。具體來說,二分思想通常應用于那些問題規模可以通過每一步驟減半的算法,例如二分查找和歸并排序。以下是一些具體的解釋:

二分查找

在二分查找中,我們每次將搜索范圍減半。假設我們在一個有序數組中查找一個元素,初始范圍是整個數組,然后我們每次比較中間元素并根據結果決定在左半部分還是右半部分繼續搜索。這種減半操作的時間復雜度是 O(log?n),因為我們至多需要進行 log?2(n) 次比較。

歸并排序

歸并排序是一種典型的分治算法,它將待排序數組分成兩個子數組,然后遞歸地對這兩個子數組進行排序,最后合并兩個有序子數組。在每個遞歸層次上,數組都被分成了兩部分,因此每層的時間復雜度是 O(n)。而遞歸的深度是 log?n 層,所以總體時間復雜度是 O(nlog?n)。

平衡二叉樹

在平衡二叉樹(如紅黑樹、AVL樹)中,插入、刪除和查找操作的時間復雜度都是 O(log?n)。這是因為這些樹的高度始終保持在 O(log?n) 的級別,任何操作都只需要沿樹的高度進行,因此時間復雜度為 O(log?n)。

二分思想的核心

二分思想的核心是每一步都將問題規模減半,從而使得總的操作次數以對數級數增長。一般來說,如果一個問題的規模在每一步操作中減小為原來的一半,那么它的時間復雜度就會是 O(log?n)。具體的公式推導如下:

設問題的規模為 n,每一步減半,則經過 k 步后,問題的規模變為 n/2^k。當問題規模減小到1時,我們有: n/2^k=1 解得: k=log?2(n)

因此,總的操作次數是 O(log?n)。

這種優化方法廣泛應用于各種算法設計中,不僅限于上面提到的幾種場景,而是可以推廣到任何能夠通過二分法減少問題規模的情形。


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

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

相關文章

【LabVIEW學習篇 - 2】:LabVIEW的編程特點

文章目錄 LabVIEW的編程特點圖形編程天然并行運行基于數據流運行 LabVIEW的編程特點 圖形編程 LabVIEW使用圖形化的圖形化編程語言(G語言),用戶通過在程序框圖中拖放和連接各種節點(Nodes)來編寫程序。每個節點代表一…

什么是跨域?——詳解跨域問題及其解決方案

目錄 引言什么是跨域同源策略跨域的產生原因跨域的常見解決方案 JSONPCORS代理服務器nginx反向代理后端設置允許跨域 CORS的詳細實現 瀏覽器中的CORS支持服務器端的CORS配置 常見的跨域場景和解決方案 跨域請求API跨域加載資源 跨域的安全性考慮跨域調試技巧總結 引言 在現代…

python+playwright 學習-90 and_ 和 or_ 定位

前言 playwright 從v1.34 版本以后支持and_ 和 or_ 定位 XPath 中的and和or xpath 語法中我們常用的有text()、contains() 、ends_with()、starts_with() //*[text()="文本"] //*[contains(@id, "xx")] //

LLM - 循環神經網絡(RNN)

1. RNN的關鍵點:即在處理序列數據時會有順序的記憶。比如,RNN在處理一個字符串時,在對字母表順序有記憶的前提下,處理這個字符串會更容易。就像人一樣,讀取下面第一個字符串會更容易,因為人對字母出現的順序…

idea MarketPlace插件找不到

一、背景 好久沒用idea了,打開項目后沒有lombok,安裝lombok插件時發現idea MarketPlace插件市場找不到,需要重新配置代理源,在外網訪問時通過代理服務進行連接 二、操作 ### File-->setting 快捷鍵 Ctrl Alt S 遠端源地…

動手學深度學習(Pytorch版)代碼實踐 -循環神經網絡-53語言模型和數據集

53語言模型和數據集 1.自然語言統計 引入庫和讀取數據: import random import torch from d2l import torch as d2l import liliPytorch as lp import numpy as np import matplotlib.pyplot as plttokens lp.tokenize(lp.read_time_machine())一元語法&#xf…

類和對象深入理解

目錄 static成員概念靜態成員變量面試題補充代碼1代碼2代碼3如何訪問private中的成員變量 靜態成員函數靜態成員函數沒有this指針 特性 友元友元函數友元類 內部類特性1特性2 匿名對象拷貝對象時的一些編譯器優化 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接…

Linux-DNS

DNS域名解析服務 1.DNS介紹 DNS 是域名系統 (Domain Name System) 的縮寫,是因特網的一項核心服務,它作為可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。…

大氣熱力學(2)——熱力學基礎

本篇文章源自我在 2021 年暑假自學大氣物理相關知識時手寫的筆記,現轉化為電子版本以作存檔。相較于手寫筆記,電子版的部分內容有補充和修改。筆記內容大部分為公式的推導過程。 文章目錄 2.0 本文所用符號一覽2.1 準靜態過程2.2 熱量和熱容量2.2.1 熱量…

Java對象

面向對象和面向過程的區別 兩者的主要區別在于解決問題的方式不同 面向過程把解決問題的過程拆成一個個方法,通過一個個方法的執行解決問題。 面向對象會先抽象出對象,然后用對象執行方法的方式解決問題。 另外,面向對象開發的程序一般更易維…

乞丐傳武功

題目 你施舍給了路邊的乞丐兩個饅頭,誰料這個乞丐其實是隱士高人。為了回報你的善心,只見他緩緩從懷中掏出了數本武功秘籍,讓你從中挑選一本。你珍重地接過這些秘籍,目光掃過每本封面,降龍十八掌、神照經、易筋經、凌…

[FreeRTOS 基礎知識] 互斥量 概念

文章目錄 基礎知識互斥量互斥量與信號量區別優先級反轉優先級繼承小結 基礎知識 [FreeRTOS 基礎知識] 信號量 概念 互斥量 互斥量(Mutex,全稱:Mutual Exclusion),在計算機科學中,是一種用于防止多個進程同…

科研繪圖系列:R語言實驗結果組圖(linechart + barplot)

介紹 實驗結果的多樣性意味著每個結果都可能揭示研究的不同方面或角度。在科學研究和數據分析中,通常我們會收集一系列數據點,每個數據點都對應著實驗的一個特定變量或條件。為了全面理解這些數據,我們可能會采用多種可視化技術來展示它們。 將多個結果分別可視化,可以讓…

親子時光里的打臉高手,賈乃亮與甜馨的父愛如山

賈乃亮這波操作,簡直是“實力打臉”界的MVP啊! 7月5號,他一甩手,甩出張合照, 瞬間讓多少猜測紛飛的小伙伴直呼:“臉疼不?”帶著咱家小甜心甜馨, 回了哈爾濱老家,這趟親…

Nginx(http配置、https配置)訪問Spring Boot 項目

前文 記錄一下在linux服務器下配置nginx中nginx.conf文件代理訪問springboot項目 1. spring boot.yml配置 其他mysql,redis,mybatis等之類的配置就不一一列出了 # 自定義配置 為了等下驗證讀取的配置文件環境 appName: productserver:port: 8083 # 應用服務 WEB 訪問端口s…

SQL窗口函數詳解

詳細說明在sql中窗口函數是什么,為什么需要窗口函數,有普通的聚合函數了那窗口函數的意義在哪,窗口函數的執行邏輯是什么,over中的字句是如何使用和理解的(是不是句句戳到你的痛點,哼哼~&#x…

C語言編譯和編譯預處理

編譯預處理 ? 編譯是指把高級語言編寫的源程序翻譯成計算機可識別的二進制程序(目標程序)的過程,它由編譯程序完成。 ? 編譯預處理是指在編譯之前所作的處理工作,它由編譯預處理程序完成 在對一個源程序進行編譯時,…

全國青少年軟件編程等級考試-四級-奇偶之和(真題)

題目:奇偶之和 1.準備工作 (1)保留舞臺中的小貓角色; 2.功能實現 (1)分別計算1~100中,奇數之和,偶數之和; (2)說出奇數之和,偶數之和。 講解: 1、如何判斷奇偶數 奇數是指除以2有…

C++deque容器

文章目錄 deque容器概念deque操作deque對象的帶參數構造deque頭部和末尾的添加移除操作deque的數據存取deque與迭代器deque賦值deque插入deque刪除 deque容器概念 deque是雙端數組,而vector是單端的。 ?deque頭部和尾部添加或移除元素都非常快速, 但是在中部安插元…

在x86/amd64的機器上使用Docker運行arm64v8/ubuntu并安裝ROS1

一、準備工作 主要是因為國內網絡的問題,可能導致鏡像拉取失敗,解決辦法參考:鏡像加速 二、安裝運行過程 2.1拉取鏡像: sudo docker pull arm64v8/ubuntu:20.04這個是ubuntu的拉取指令,其他的也是類似。 2.2 運行…