數據結構與算法經典問題解析-Java語言描述(第一章緒論)

2020年2月22日
本章知識點總結:
1.什麼是數據結構?
一旦變量中有數據,就需要一種操縱這些數據的機制來求解問題。 數據結構(data structure)就是計算機中存儲和組織數據的一種特定方式,它將使得數據 處理更加有效。一個數據結構就是一種組織和存儲數據的特定形式。常用的數據結構包 括數組、文件、鏈表、找、隊列、樹和圖等。
根據元素的組織方式,數據結構可以分爲兩種類型:

  1. 線性數據結構:可以按線性次序訪問元素,但它並不強制將所有元素連續地存儲 在一起(例如,鏈表)。例如,鏈表、棧和隊列。
  2. 非線性數據結構:這種數據結構的元素是以非線性次序來存儲和訪問的。例如, 樹和圖。

2.什麼是算法?爲什麼需要算法分析?算法分析的目的?
算法就是用一條接一條的指令來解決給定的問題。
算法分析能夠幫助我們確定在時間和空間開銷方面哪一種算法是有效的。
算法分析的目標是根據運行時間及其他的一些因素(如內存,開發者的工作量等)來比較算法(或解決方案)的優劣。

3.什麼是增長率?
所謂增長率就是隨着輸入規模的增加,算法運行時間增加的速度,它是輸入規模的函數。假設你去商店買一輛小車和一輛自行車,這時你遇到了你的朋友,當他問你買什麼東西時,通常你會這麼回答他,我來買小車。這是因爲比起自行車的花費,小車的花 費要大得多得多(自行車的花費被小車的花費忽略掉了)。
總花費=小車的花費+自行車的花費
總花費約等號≈小車的花費(近似值)
對於上述例子,我們可以把總成本寫成小車花費和自行車花費的函數。對於一個給 定的函數,我們忽略了相對微不足道的低階因變量(當輸人規模n很大時。

4.常用的增長率以及之間的增長快慢關係。
常用增長率:
在這裏插入圖片描述
常用增長率的增長快慢關係:
在這裏插入圖片描述

5.三種漸進表示法
1.大O表示法
在這裏插入圖片描述2…Ω表示法
在這裏插入圖片描述
在這裏插入圖片描述
3.Θ表示法
在這裏插入圖片描述
6.漸進表示法的性質
在這裏插入圖片描述
7.常用對數和累加公式
在這裏插入圖片描述
8.分治法主定理公式
在這裏插入圖片描述
運用該定理的問題:
在這裏插入圖片描述
9.問題規模減小和遞歸求解主定理
在這裏插入圖片描述
10.問題規模減小和遞歸求解主定理的變型
在這裏插入圖片描述11.平攤分析
平攤分析是指確定一系列操作的平均運行時間。平攤分析不同於平均情況分析,因 爲它不對輸入數據值的分佈做任何假設,而平均情況分析假設輸人數據並不是最糟糕的 情況(例如,有些排序算法能很好地處理“平均”情況下的輸人序列,但對於個別輸人序 列算法的性能極差)。也就是說,平攤分析是一種對一系列操作而不是對單個操作的最壞情況分析。
在標準最壞情況分析提供了過度悲觀的上限的情況下,平攤分析的目的是爲了更好 地理解某些算法的運行時間。平攤分析通常適用於一系列操作,並且這一系列操作中的 絕大部分操作的時間開銷小,只有少數操作開銷大。如果能夠說明開銷大的操作特別少, 那麼可以把它們歸咎爲開銷小的操作,然後僅求開銷小操作系列的上限即可。
在平攤分析中,通常的方法是爲操作序列中的每個操作賦予一個人爲的開銷,使得 整個操作序列總的人爲開銷受限於操作序列的實際總開銷。這種人爲開銷稱爲操作的平攤開銷。因此,在分析執行時間時,平攤開銷是一種理解總運行時間的正確方法。但注 意某些特定的操作仍然會花費很長的運行時間,所以平攤分析不是對操作序列中任意單 個操作的運行時間上限的分析。
當操作序列中的一個操作對後一個操作的時間開銷有影響時:
*某個特別操作的時間開銷可能很大。
*但該操作可能將數據結構導向另一個狀態,使之後的兒個操作時間開銷很小。
例子:從一個數組中找到第A個最小的元素。對於這個問題可以用排序算法來解決。 在對給定數組進行排序後,只需要直接返回有序數組中第A個位置的元素。執行排序(假設使用基於比較的排序算法)操作的時間開銷是O(nlogn)。如果執行n次這樣的査找,那 麼每次査找的平均時間開銷是O(nlogn/n)=〇(logn)。這清楚地說明,一次排序可以降低後續操作的複雜性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章