日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法章节 递归、排序、⼆分查找

發(fā)布時間:2023/12/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法章节 递归、排序、⼆分查找 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

遞歸

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

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

排序

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

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

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

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

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

?分查找

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

相關(guān)圖片

?

參考鏈接

  • 菜鳥教程

總結(jié)

以上是生活随笔為你收集整理的算法章节 递归、排序、⼆分查找的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。