算法導論 第二部分

排序與順序統計量   排序,就是把無序的對象,按照某些關鍵字,排列,使存儲的順序和關鍵字的大小之間存在一定關係。第i個順序統計量就是,存儲順序中的第i個。

排序 (具體算法網站,http://www.cs.usfca.edu/~galles/visualization/Algorithms.html  我也是在網上看到的哦,不記得是誰發的了,如果作者看到,可以聯繫我)

第六章,堆排序,原址排序

  • 堆,一棵完全二叉樹(滿二叉樹的右下角的最後一行缺了一些)。與二叉樹的生成不同,堆從下往上生成,容易保證它是完全二叉樹的性質。插入結點也是從下往上調整。
  • 但是,堆排序的時候,是總是把根結點和最後一個葉子結點對換,再從上往下調整的。

第七章,快速排序(不穩定)

  • 最常用的算法,原址排序,與其他O(nlogn)算法比有最小的常數因子。依賴於主元的選擇,可以用隨機化減少最壞情況發生的概率。

第八章,線性時間排序。 時間減少的原因 1. 對處理的對象有限定 2. 空間換時間

  • 由決策樹推出,比較算法的下界 nlogn,也就是說,如果一個排序算法是基於比較的,那麼,不可能比nlogn更少的時間了,最多就在常數因子上有進步
  • 計數排序   排序對象限定:某一個範圍內的可數個對象,比如,整數[1~k]。 空間消耗:非原址排序,以整數[1~k]爲例,空間爲 k+n。 算法時間中的k就是範圍,n是需要排序的數的個數
  • 基數排序  排序對象限定:1. 可以一位一位的排 2.一般基數排序是用計數排序作爲基礎排序的,所以,某一範圍內的可數個對象。以多位數的整數爲例,基數排序的思想就是,個位十位...這樣的排。因此,它所用的基礎排序直接影響到了它的性能。 算法時間中的d是位數。
  • 桶排序     排序對象限定:均勻分佈  空間消耗:非原址排序。 將數據映射到n個桶中,如果服從均勻分佈的條件,桶的大小會趨於1。因此平均情況時間複雜度是O(n)

第九章,中位數和順序統計量

  • 特殊的順序統計量,最大值和最小值。 單個確定,必須有n-1次比較才能確定。
  • 基於快速排序的順序統計量確定。期望時間O(n)。快速排序之所以適合做這件事,1. 每次都能確定一個順序統計量 2.方便剪枝。 個人覺得歸併排序應該是幹不了這活的
  • 分治算法,將數據5個5個分組,找中位數,找中位數,剪枝,遞歸。最壞時間複雜度O(n)。雖然沒有驗證過,但這個5,應該是有點講究的。這是比快速排序剪枝策略更好的算法

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