【TypeScrpt算法】算法的復雜度分析

算法的復雜度分析

什么是算法復雜度?

不同的算法,其實效率是不一樣的
讓我舉一個案例來比較兩種不同的算法在查找數組中給定元素的時間復雜度
[1,2,3,4,5,6,7,...9999,n]

順序查找

這種方法從頭到尾遍歷整個數組,依次比較每個元素和給定元素的值。
如果找到想等元素,則返回下標,如果遍歷整個數組都找不到就返回-1。

function sequenSearch(array:number[],target:number) {let result = -1for (let i = 0;i<array.length;i++) {array[i] === target ? result = i : undefined}return result
}

最長時間復雜度:n
平均的時間復雜度: n / 2
image.png
該算法時間復雜度是O(n)

二分查找

這種算法假設數組是有序的,每次選擇數組中間的元素與給定元素進行比較。
如果找到想等元素,則返回下,如果給定的元素比中間元素小,則在數組左半部分繼續查找;如果給定的元素比中間元素大,則在數組右半部分繼續查找。
這樣每次查找都會將查找的范圍減半,知道找到想等的元素或者查找范圍為空。

function binarySearch(array: number[], target: number) {let left = 0;let right = array.length - 1;while (left <= right) {let mid = Math.floor((left + right) / 2);const midTarget = array[mid];if (midTarget === target) {return mid;} else if (midTarget < target) {left = mid + 1;} else {right = mid - 1;}}return -1;
}

最長時間復雜度:log(n,2)
平均的時間復雜度: log(n,2) / 2
image.png
該算法時間復雜度是O(log n)

大O表示法(Big O notation)

大O表示法(Big O notation)英文翻譯為大O符號(維基百科翻譯),中文通常翻譯為大O表示法(標記法)。

  • 這個記號則是在德國數論學家愛德蒙·蘭道的著作中才推廣的,因此它有時又稱為蘭道符號(Landau symbols)。
  • 代表“order of …”.……階)的大O,最初是一個大寫希臘字母“O”(omicron),現今用的是大寫拉丁字母“O”。

時間復雜度

分析算法時間效率舉例

  • 舉個例子,解決一個規模為n的問題所花費的時間(或者所需步驟的數目)可以表示為: T(n)=4n2-2n+2

  • n增大時,n2項開始占據主導地位,其他各項可以被忽略;

  • 舉例說明:當n=500

  • 4n2項是2n項的1000倍大,因此在大多數場合下,省略后者對表達式的值的影響將是可以忽略不計的。
    進一步看,如果我們與任一其他級的表達式比較, n2的系數也是無關緊要的。
    這樣,針對第一個例子T(n) = 4n2- 2n+2,大O符號就記下剩余的部分,寫作:
    T(n) ∈ o(n2)

    T(n)= o(n2)
    我們就說該例子算法具有**n2**階(平方階)的時間復雜度,表示為**O(n2)**

常用函數階

介紹

image.png

案例

image.png

圖表

image.png

空間復雜度

空間復雜度指的是程序運行過程中所需要的額外存儲空間。

空間復雜度也可以用大O表示法來表示;
空間復雜度的計算方法與時間復雜度類似,通常需要分析程序中需要額外分配的內存空間,如數組、變量、對象、遞歸調用等。

分析算法空間效率舉例

舉個栗子:
對于一個簡單的遞歸算法來說,每次調用都會在內存中分配新的棧幀,這些棧幀占用了額外的空間。

  • 因此,該算法的空間復雜度是o(n),其中n是遞歸深度。
    而對于迭代算法來說,在每次迭代中不需要分配額外的空間,因此其空間復雜度為o(1)。
    當空間復雜度很大時,可能會導致內存不足,程序崩潰。
    在平時進行算法優化時,我們通常會進行如下的考慮:

  • 使用盡量少的空間(優化空間復雜度);

  • 使用盡量少的時間(優化時間復雜度);

  • 特定情況下:使用空間換時間或使用時間換空間;

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

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

相關文章

SAP-查看業務變更記錄

一、通過事務碼查詢修改記錄 1、輸入TCODE&#xff1a;AUT10&#xff0c;輸入時間和事務處理代碼&#xff0c;全部搜索輸入*。 2、點擊刷新&#xff0c;對已輸入的條件進行重置。 3、在左側下菜單&#xff0c;選擇要查詢的事務記錄&#xff0c;雙擊&#xff0c;會帶入“事務處…

【nlp】3.2 Transformer論文復現:1. 輸入部分(文本嵌入層和位置編碼器)

Transformer論文復現:輸入部分(文本嵌入層和位置編碼器) 1 輸入復現1.1 文本嵌入層1.1.1 文本嵌入層的作用1.1.2 文本嵌入層的代碼實現1.1.3 文本嵌入層中的注意事項1.2 位置編碼器1.2.1 位置編碼器的作用1.2.2 位置編碼器的代碼實現1.2.3 位置編碼器中的注意事項1 輸入復現…

探索結構體的奧秘

目錄 &#x1f342;結構體 1&#xff0c;結構體的聲明 1.1 結構的基礎知識 1.2 結構的聲明 1.3 特殊的聲明 1.4 結構的自引用 1.5 結構體變量的定義和初始化 1.6 結構體內存對齊 1.6.1 如何計算 1.6.2 為什么存在內存對齊 1.7 修改默認對齊數 1.8 結構體傳參 2&am…

3.7寸墨水屏藍牙卡證

超薄機身&#xff0c;厚度不足一厘米&#xff0c;輕松佩戴無負重感。 無需基站&#xff0c;服務器&#xff0c;手機APP直接更新~ 獨創快速掃描技術&#xff0c;智能感應標簽 超長待機&#xff0c;超低功耗&#xff0c;Type C接口充電&#xff0c;一次充電可續航一年&#xf…

極智開發 | 隨機初始化onnx模型權重的方法

歡迎關注我的公眾號 [極智視界],獲取我的更多經驗分享 大家好,我是極智視界,本文分享一下 隨機初始化onnx模型權重的方法。 邀您加入我的知識星球「極智視界」,星球內有超多好玩的項目實戰源碼和資源下載,鏈接:https://t.zsxq.com/0aiNxERDq onnx 模型一直是在算法部署中…

增量有余、后勁不足,星途汽車10月份銷量環比下降3.9%

撰稿|行星 來源|貝多財經 近日&#xff0c;奇瑞集團發布了10月銷量月報。報告顯示&#xff0c;奇瑞集團于2023年10月銷售汽車20.03萬輛&#xff0c;同比增長50.8%&#xff0c;單月銷量首次突破20萬輛&#xff1b;2023年前10個月的累計銷量為145.36輛&#xff0c;同比增長41.6…

C語言運算符詳解

詳細介紹了C語言表達式、算術運算符、賦值運算符、關系運算符、條件結構、邏輯運算符、位運算符的語法和使用方法&#xff0c;并討論了運算符的優先級。 1、表達式與算術運算符 在C語言中&#xff0c;表達式是一個類似數學中的算式&#xff0c;表達式由變量、字面值、常量、運…

【坑】JDK21虛擬線程不支持run方法

【坑】JDK21虛擬線程不支持run方法 run // do nothing java.lang.VirtualThread Overridepublic void start() {start(ThreadContainers.root());}Overridepublic void run() {// do nothing}

vue的模板編譯

Vue如何進行模板編譯 Vue 模板編譯是 Vue.js 在運行時將模板字符串轉換為渲染函數的過程。Vue 模板編譯分為兩個主要步驟&#xff1a; 模板解析&#xff1a; Vue 編譯器將模板字符串解析成一個抽象語法樹&#xff08;AST&#xff0c;Abstract Syntax Tree&#xff09;。AST 是…

2023年,人工智能在醫療行業領域的應用場景

本期行業洞察將帶領大家了解人工智能在醫療行業領域的應用&#xff0c;主要了解在患者治療和運營中的應用、人工智能作為預防工具以及大型醫院目前如何使用人工智能。未來的智慧醫療時代已經悄然到來。 人工智能在患者治療和機構運營中的應用 人工智能有望徹底改變醫療護理的…

csapp archlab part 1

part A [rootedb3963640a6 misc]#./yas sum.ys [rootedb3963640a6 misc]# ./yis sum.yo./yas 和 ./yis 是匯編語言編譯器和模擬器的命令行工具。 ./yas 是一個匯編語言編譯器&#xff0c;它將匯編語言代碼轉換為可執行的二進制文件。./yas sum.ys 將sum.ys文件編譯成了sum.yo可…

Mysql 中如何導入數據?

文章目錄 前言使用 LOAD DATA 導入數據使用 mysqlimport 導入數據mysqlimport的常用選項介紹后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;Mysql &#x1f431;?&#x1f453;博主在前端領域還有很多知識和技術需要掌握&#xff0c;正…

計算機畢業設計項目選題推薦(免費領源碼)Java+ssm+MYSQL酒店大數據資源管理系統的設計與實現02029

摘要 信息化社會內需要與之針對性的信息獲取途徑&#xff0c;但是途徑的擴展基本上為人們所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人們經常能夠獲得不同類型信息&#xff0c;這也是技術最為難以攻克的課題。針對酒店大數據資源管理系統等問題&#xff0c;對…

發揮云計算潛力:Amazon Lightsail 與 Amazon EC2 的綜述

文章作者&#xff1a;Libai 歡迎來到云計算世界&#xff0c;這里有無數的機會和無限的應用程序增長。 在當今的數字時代&#xff0c;企業可能會發現管理基礎架構和擴展應用程序具有挑戰性。 傳統的本地解決方案需要大量的硬件、軟件和維護前期投資。 要滿足不斷增長的需求&…

3D Slicer使用與體繪制

3D Slicer默認不進行體繪制&#xff0c;右上角的三維重建窗口只顯示一個空的立方體框。要進行體繪制&#xff0c;先切換到體繪制設置窗口&#xff1a; 在體繪制設置窗口中&#xff0c;選擇進行體繪制的DICOM序列&#xff0c;然后將體繪制開關打開&#xff08;眼睛標志&#xff…

如何快速查找日志?

快速查找日志 在報障處理中&#xff0c;經常會有查日志的情況&#xff0c;快速查找日志&#xff0c;就能快速發現問題。 以下提供我常用的二種查找方式&#xff1a;關鍵詞查找和時間查找。 1.關鍵詞 cat <fileName> | grep 關鍵詞2.按時間順序切割日志文件 sed -n /2023…

Omniverse合成數據生成【城市交通場景】

智慧城市是城市生活的未來。 然而&#xff0c;它們可能給城市規劃者帶來各種挑戰&#xff0c;尤其是在交通領域。 為了取得成功&#xff0c;城市的各個方面—從環境和基礎設施到商業和教育—必須在功能上整合。 這可能很困難&#xff0c;因為單獨管理交通流量是一個復雜的問題…

程序員護城河:保障系統安全與網絡穩定的不可或缺力量

引言&#xff1a; 在當今數字化時代&#xff0c;計算機和互聯網的廣泛應用使得程序員的角色變得越來越重要。作為保障系統安全與網絡穩定的關鍵力量&#xff0c;程序員需要具備一系列的基本能力&#xff0c;同時還需掌握一些專業技術和策略&#xff0c;以確保系統運行的安全性…

Navicat 技術指引 | 適用于 GaussDB 的查詢編輯器

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持對 GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結構同步、協同合作、數據遷移等&#xff09;&#xff0c;這…

leecode | HTML 解析器

提供一串字符串&#xff0c;根據給定的規則&#xff0c;去解析該字符串&#xff0c;并返回結果 簡而言之&#xff0c;就是根據指定的格式&#xff0c;替換內容 HTML 里這些特殊字符和它們對應的字符實體包括&#xff1a; 雙引號&#xff1a;字符實體為 " &#xff0c;對應…