算法章節 遞歸、排序、?分查找

遞歸

概念與特性函數調?函數?身的編程?式叫做遞歸,調?為”遞“,返回為”歸“
三個條件1. ?個問題的解可以分解為多個?問題的解;
2. 分解之后的?問題,除了數據規模不同,求解思路跟原問題相同;
3. 存在遞歸終?條件;
編程技巧1. 尋找將?問題分解為?問題求解的規律;
2. 找出遞推公式終?條件,將其直接翻譯成代碼;
3. 切記不要???層?層的遞歸;
換句話說,也就是:如果?個問題A可以分解為若??問題B、C、D,我們可以假設?問題B、C、D已經解決,在此基礎上思考如何解決問題A。
我們只需要思考問題A與?問題B、C、D兩層之間的關系即可,不需要?層?層往下思考?問題與??問題,??問題與???問題之間的關系。
?
應?場景遞歸是?種應??常?泛編程技巧,很多數據結構和算法的編碼實現都要
?到遞歸,?如快排、歸并排序、DFS(深度優先搜索算法)、?叉樹遍歷、回溯等
其他知識點1. 避免堆棧溢出(限制調?層次;遞歸改為迭代;尾遞歸優化);
2. 避免重復計算(利?備忘錄);
掌握程度

1. 熟練編寫斐波那契數列、全排列、?皇后、快速排序;歸并排序、DFS、?叉樹遍歷、鏈表反轉遞歸實現等;
2. 掌握遞歸算法的時間、空間復雜度分析;其中時間復雜度通過遞推公式或者遞歸樹來分析;空間復雜度跟遞歸函數調?棧深度成正?;?

排序

概念與特性1. 穩定性:如果待排序的序列中存在值相等的元素,經過排序之后,相等元素之間原有的先后順序不變;
2. 原地:不額外申請?常量級的空間來臨時存儲排序數據;原地排序算法并不?定空間復雜度是O(1),空間復雜度是O(1)的排序算法?定是原地排序算法,?如快速排序是原地排序算法,但因為?到遞歸,函數調?棧會消耗?常量級的空間,所以,空間復雜度并?O(1),是O(logn)。
O(n^2)冒泡排序冒泡排序是穩定原地排序算法。 整個冒泡排序過程包含多遍冒泡操作。每次冒泡操作都會遍歷整個數組,依次對相鄰的元素進??較,看是否滿???關系要求,如果不滿?,就將它們互換位置。?次冒泡操作會讓?少?個元素移動到它應該在的位置,重復n次,就完成了n個數據的 排序?作。
插?排序插?排序是穩定原地排序算法。?先,我們將數組中的數據分為兩個區間,已排序區間和未排序區間。初始已排序區間只有?個元素,就是數組中的第?個元素。插?算法的核?思想是取未排序區間中的元素,在已排序區間中找到合適的插?位置將其插?,并保證已排序區間數據?直有序。重復這個過程,直到未排序區間中元素為空,算法結束。
選擇排序選擇排序算法是?穩定原地排序算法。其實現思路有點類似插?排序,也分已排序區間和未排序區間。
但不同點在于,選擇排序算法每次會從未排序區間中,找到最?
的元素,將其放到已排序區間的末尾。
O(nlogn)快速排序快速排序是?穩定原地排序算法。空間復雜度是O(logn)。 如果要排序數組中下標從p到r之間的?組數據,我們選擇p到r之 間的任意?個數據作為pivot(分區點),然后,遍歷p到r之間 的數據,將?于pivot的放到左邊,將?于pivot的放到右邊,將 pivot放到中間。經過這?步驟之后,p到r之間的數據就被分成 了三個部分。假設pivot現在所在位置的下標是q,那p到q-1之 間數據都?于pivot,中間是pivot,q+1到r之間的數據都?于 pivot。根據分治、遞歸的處理思想,我們遞歸排序下標從p到 q-1之間的數據和下標從q+1到r之間的數據,直到區間縮?為 1,就說明所有的數據都有序了。
遞推公式:quickSort(p…r)=quickSort(p…q-1) & quickSort(q+1…r)
歸并排序歸并排序是穩定?原地排序算法。空間復雜度是O(n)。 如果要排序?個數組,我們先把數組從中間分成前后兩部分,然后,對前后兩部分分別排序,再將排好序的兩部分合并在?起,這樣整個數組就都有序了。遞推公式:mergeSort(p…r)=merge(mergeSort(p…q), mergeSort(q+1… r))
O(n)桶排序桶排序,顧名思義,會?到“桶”,核?思想是將要排序的數據分到?個有序的桶?,每個桶?的數據再單獨進?排序。桶內排完序之后,再把每個桶?的數據按照順序依次取出,組成的序列就是有序的了。要排序的數據需要很容易就能劃分成m個桶,并且,桶與桶之間 有著天然的??順序。這樣每個桶內的數據都排完序之后,桶與桶之間的數據不需要再進?排序。
計數排序

實際上,計數排序是桶排序的?種特殊情況。當要排序的n個數據,所處的范圍并不?的時候,?如最?值是k,我們就可以把數據劃分成k個桶。每個桶內的數據值都是相同的,省掉了桶內排序的時間。

基數排序基數排序對要排序的數據也是有要求的,需要可以分割出獨?的“位”來?較,?且位之間有遞進的關系:如果a數據的?位? b數據?,那剩下的低位就不??了。除此之外,每?位的數 據范圍不能太?,可以使?其他線性排序算法來排序,否則,基數排序的時間復雜度就?法做到O(n)了。
應?場景?程中的排序函數?般使?O(nlogn)的快排、歸并或者堆排序作為主排序算 法,當數據規模較?時,轉?選擇使?更加簡單的插?排序。
其他知識點

為了避免快速排序時間復雜度退化為極端情況O(n^2),我們使?更加?級的 分區點選擇?式,?如三數取中法、隨機法等。

掌握程度1. 熟練掌握冒泡、插?、選擇、快速、歸并排序的原理、代碼實現;
2. 熟練掌握快速、歸并排序的時間和空間復雜度分析;
3. 掌握桶排序、計數排序、基數排序的原理

?分查找

概念與特性?分查找針對的是?個有序的數據集合,查找思想有點類似分治思想。每次都通過跟區間的中間元素對?,將待查找的區間縮?為之前的?半,直到找到要查找的元素,或者區間被縮?為0。
操作與復雜度?分查找的時間復雜度是O(logn)
?分查找變體變體?:查找第?個值等于給定值的元素
變體?:查找最后?個值等于給定值的元素
變體三:查找第?個?于等于給定值的元素
變體四:查找最后?個?于等于給定值的元素
掌握程度熟練掌握?分查找、?分查找變體的代碼實現

相關圖片

?

參考鏈接

  • 菜鳥教程

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

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

相關文章

codeforces 50A-C語言解題報告

50A題目網址 解題報告-others 題目解析 1.輸入n x m大小的木板,使用21大小的多米諾去填滿,求最多的多米諾數目 2.通過分析把木板分為奇數和偶數的情況 1)有一邊是偶數的情況: 使用2去填滿 2)兩個邊都是奇數 奇數-1偶數 還是讓木板的(奇數-1)邊去和2平行,再加上 (m-1)/2(n/1)…

Java命令:jps — 查看進程信息

文章目錄一、簡介二、常用命令1、jps2、jps -l3、jps -q4、jps -m5、jps -v6、jps失效一、簡介 JVM Process Status Tool,顯示指定系統內所有的HotSpot虛擬機進程。 功能: 顯示當前所有java進程pid的命令,我們可以通過這個命令來查看到底啟…

操作系統概述 記錄操作系統相關知識

操作系統 現代計算機系統由一個或多個處理器、主存、打印機、鍵盤、鼠標、顯示器、網絡接口以及各種輸入/輸出設備構成。上面提到的這些東西都屬于硬件資源,用戶不會直接和硬件進行交互,計算機安裝了一層軟件,這層軟件能夠通過響應用戶輸入的…

2014年英語一作文partA

作文講解網址 題目 Write a letter of about 100 words to the president of your university, suggesting how to improve students’ physical condition. You should include the details you think necessary. You should write neatly on the ANSWER SHEET. Do not sign…

JDK工具使用大全

文章目錄一、簡介一、簡介 在JDK的bin目錄下有很多命令行工具: 常用工具使用詳解如下: Java命令:jps — 查看進程信息 Java命令:jstack — 獲取線程dump信息 Java命令:jmap — 打印指定進程的共享對象內存映射或…

Linux進程 excel族函數的用法

介紹 使用fork創建一個進程之后,經常會在新進程中調用exec函數執行別的程序當前進程調用exec函數之后,這個進程會被完全替代換成新的程序,即便如此仍然是同一個進程,進程ID不變函數族 execl execlp execle execvp execvpe頭文件 …

codeforces 118A-C語言解題報告

118A題目網址 題目解析 1.輸入一個英語字符串,要求把其中的元音字母刪去(元音是字母“A”、“O”、“Y”、“E”、“U”、“I”包括大小寫,其余的是輔音),把剩余的輔音字母全部變為小寫,并在每一個輔音字母之前加上一個. 如: 輸入: Codeforces 輸出: .c.d.f.r.c.s…

ArrayList和HashMap遍歷比較

目錄一、ArrayList遍歷方式1、普通for循環遍歷2、增強for循環遍歷3、Iterator迭代器遍歷4、三種方式比較二、Map遍歷方式1、增強for循環 keySet() 遍歷2、增強for循環 entrySet() 遍歷3、Iterator keySet() 遍歷4、Itorator entrySet() 遍歷5、四種方式比較三、java開發手冊…

C++primer 12章 動態內存和智能指針

C引入智能指針的目的 使用智能指針來管理動態分配的對象,當一個對象應該被釋放的時候,指向他的智能指針確保自動釋放它 內存分配 靜態內存:局部static對象、類static數據成員、定義在任何函數之外的變量棧內存:定義在函數內的非…

Mac下iTerm2的安裝與配置

目錄一、iTerm2簡介二、下載以及安裝三、iTerm2主題配置四、配置Oh My Zsh1、安裝方式(1)一鍵安裝(2)手動安裝3、切換zsh4、修改主題五、配置Meslo字體六、聲明高亮七、自動建議填充八、iTerm2快速隱藏和顯示九、iTerm2隱藏用戶名…

codeforces 282A-C語言解題報告

282A題目網址 題目解析 1.第一行輸入n(表示有n條語句都要執行),再輸入X,X(都表示X1),–X,X–(都表示X-1),最初X0,輸出X的值 2.使用字符數組去存放每一行的字符串,因為字符串,所以直接整體存入scanf("%s",c); 3.因為字符數組最后一個是’\0’去表示末尾,所以要開辟…

Java命令:jinfo — 查看進程參數

目錄一、簡介二、常用命令1、jinfo -flags pid : 打印當前指定java進程中已經設定的所有JVM參數信息2、jinfo -flag pid : 打印指定名稱的參數3、jinfo -flag [|-] pid : 打開或關閉參數4、jinfo -sysprops pid : 打印當前java進程中設定的系統環境參數一、簡介 jinfo 是 JDK …

C++primer第八章 IO庫 8.1 IO類

IO庫設施 istream (輸入流)類型,提供輸入操作。ostream (輸出流)類型,提供輸出操作。cin,—個 istream對象,從標準輸入讀取數據。cout, 一個ostream對象,向標準輸出寫入數據。cerr…

2014年英語一作文partB漫畫作文

題目 Write an essay of 160-200 words based on the following drawing.In your essay you should describe the drawing brieflyexplain its intended meaning,give your comments 做題點 1.使用三段式,第一段:圖片內容;第二段:圖片暗示;第三段:寫自己的評論 2.描述圖片…

Spring Cloud 系列之 Nacos 配置中心

目錄一、Nacos簡介二、Nacos安裝及配置1、環境準備2、安裝包下載(1)源碼方式(2)發行包方式3、啟動Nacos服務4、Nacos數據庫配置(1)MySQL數據源(2)初始化 MySQL 數據庫(3&…

C++primer第八章 IO庫 8.2 文件輸入輸出

8.2文件輸入輸出 頭文件fstream定義了三個類型來支持文件IO:ifstream從一個給定文件讀取數據,ofstream向一個給定文件寫入數據,以及fstream可以讀寫給定文件。在17.5.3節中(第676頁)我們將介紹如何對同一個文件流既讀…

codeforces 112A-C語言解題報告

112A題目網址 題目解析 1.輸入兩行字符串,不區分大小寫地使用字典序去比較大小 A<B -1 A>B 1 AB 0 舉例: 輸入 abcdefg AbCdEfF 輸出 1 2.字典序:在遇到第一個不同的字符時,比較的大小,就是字符串的大小 列舉法: 1.列出所有情況 1)a[i]是大寫,b[i]是小寫 a[i]轉換為小…

SpringBoot 集成 Nacos

目錄一、前言二、Nacos集成1、引入Nacos依賴2、設置Nacos配置3、加載Nacos配置中心配置項4、Nacos集成驗證5、Nacos配置中心配置項動態生效Nacos安裝詳見&#xff1a;Spring Cloud 系列之 Nacos 配置中心 一、前言 上一篇已經講解了怎樣安裝安裝、啟動、配置 Nacos&#xff0c…

C++primer第八章 IO庫 8.3string流

8.3string流 sstream頭文件定義了三個類型來支持內存IO,這些類型可以向string寫入數據,從string讀取數據&#xff0c;就像string是一個IO流一樣。istringstream從string讀取數據&#xff0c;ostringstream向string寫入數據&#xff0c;而頭文件stringstream既可從string讀數據…

英語口語海報演講--東軟

海報 海報上的內容 Nuclear waste water 1.Damage the devastating impact of nuclear radiation on the world 2.Marine life genetically mutated or dead 3.water resources polluted water resources 4.the future of humanity genetic damage/food and environment destr…