天天看點

《算法圖解》第一章學習

第一章

1.二分法查找

引入的例子就是大學時候經常玩的助興遊戲,猜數字1到100,其中一個人先确定一個數字,然後其他人來猜,根據先前确定的數字告訴小夥伴是大于了,還是小于了,然後慢慢往結果靠近

其輸入是一個有序的元素清單(必須有序的原因稍後解釋)。如果要查找的元素包含在清單中,二分查找傳回其位置;否則傳回null。

《算法圖解》第一章學習

一般而言,對于包含n個元素的清單,用二分查找最多需要log2n步,而簡單查找最多需要n步。

《算法圖解》第一章學習

(講的非常詳細,易于了解)

2.運作時間

最多需要猜測的次數與清單長度相同,這被稱為線性時間(linear time)。

《算法圖解》第一章學習

關鍵的一句話,運作時間的增速不同

《算法圖解》第一章學習

使用大O表示法,這個運作時間為O(n)。機關秒呢?沒有——大O表示法指的并非以秒為機關的速度。大O表示法

讓你能夠比較操作數,它指出了算法運作時間的增速。

3.常用大O時間

 O(logn),也叫對數時間,這樣的算法包括二分查找。

 O(n),也叫線性時間,這樣的算法包括簡單查找。

 O(n*log n),這樣的算法包括第4章将介紹的快速排序——一種速度較快的排序算法。

 O(n2),這樣的算法包括第2章将介紹的選擇排序——一種速度較慢的排序算法。

 O(n!),這樣的算法包括接下來将介紹的旅行商問題的解決方案——一種非常慢的算法。

《算法圖解》第一章學習

使用大O表示法給出下述各種情形的運作時間。

1.3 在電話簿中根據名字查找電話号碼。

1.4 在電話簿中根據電話号碼找人。(提示:你必須查找整個電話簿。)

1.5 閱讀電話簿中每個人的電話号碼。

1.6 閱讀電話簿中姓名以A打頭的人的電話号碼。這個問題比較棘手,它涉及第4章的概

念。答案可能讓你感到驚訝!

練習1.

使用大O表示法給出下述各種情形的運作時間。

1.3 在電話簿中根據名字查找電話号碼。

1.4 在電話簿中根據電話号碼找人。(提示:你必須查找整個電話簿。)

1.5 閱讀電話簿中每個人的電話号碼。

1.6 閱讀電話簿中姓名以A打頭的人的電話号碼。這個問題比較棘手,它涉及第4章的概

念。答案可能讓你感到驚訝!

解答:http://blog.csdn.net/weixin_38313518/article/details/78325412

旅行商問題:

一個旅行商要到不同的城市去,且要保證旅程最短,如果有5個城市,就有120種走法,6個城市就有720種算法

涉及n個城市時,需要執行n!(n的階乘)次操作才能計算出結果。是以運作時間為O(n!),即階乘時間。除非涉及的城市數很少,否則需要執行非常多的操作。如果涉及的城市數超過100,根本就不能在合理的時間内計算出結果——等你計算出結果,太陽都沒了。

小結

 二分查找的速度比簡單查找快得多。

 O(logn)比O(n)快。需要搜尋的元素越多,前者比後者就快得越多。

 算法運作時間并不以秒為機關。

 算法運作時間是從其增速的角度度量的。

 算法運作時間用大O表示法表示

繼續閱讀