算法入門——二分查找,旅行商問題,大O表示法

1、 算法入門

博主在市面上發現了不少,不少有關書算法的書籍,可是真正可以讓初學者易懂的算法書籍,只是一點點,如下我講以
Aditya Bhargava寫的一本關於算法的入門書籍,爲參考,這本書很是的優秀,淺顯易懂,圖文並茂!帶你走進算法的世界,要知道,做爲一名優秀的程序員,不會算法是不行滴。
書籍的地址,能夠給博主留言,也能夠加我QQ或者微信,歡迎你和我一塊兒來探討,編程世界的祕密python

2、 算法簡介

所謂的算法是一組完成任務的指令,這個任務能夠是有關數學的,也能夠是有關功能的實現,程序員

算法是計算機的靈魂算法

  • 咱們學習算法能夠幹些什麼呢?
具體說來,咱們能夠實現編寫跟着用戶的AI系統,編寫推薦系統,固然了還有NP的一些問題。不過呢,準備好掉頭髮了嗎?讓咱們一塊兒來掉頭髮吧!!

第一個算法——二分查找

所謂的二分查找算法,是一個很是簡單的入門算法,它的目的是加快數據的查找編程

1.讓咱們從需求出發

  • 我這裏如今有1~10的數子,我如今隨機說一個數組,你去猜。咱們基本上可使用兩種方法
  1. 一個一個的去猜,假如我說的1那麼恭喜你,你一會兒就猜到了。要是我說的是10?那你可能要猜10次
  2. 使用二分查找法,假如我說的1那麼你能夠猜5,我說」不對,大了「,那你又說」2」,我說「不對,大了」,如何你又猜到1,我說 「猜對了「這時候,你只須要猜3次就猜到了
  • 在大量的數學論證中,咱們能夠用數學公式對二分查找所須要的最大次數,得出這樣的一個公式

\[ x=log_2 N,2^3=8,log_28=3,log_22^3=3 \]
它指的是若是你在n個要查找的元素中,須要找一個元素,那麼你最多須要x步。數組

  • 注意若是你連上述的公式都看不懂,那麼我也許會懷疑你的高數是否是體育老師教的了。
  • 須要提醒你的是,這n個元素要有順序!,也就是說 若是是一個無序的組合,那麼這個算法行不通

2. 如何用代碼表示呢?(Python)

特別須要你注意的是:咱們這選用python作爲編程語言,python簡單易學微信

博主比較忙,簡單的代碼就不敲了,複雜一些的會帶着你們敲一下app

3、對於算法的效率

  1. 經過前面的學習,咱們可能絕對這個二分查找好像並無多塊啊,可是若是你要查找40億個數據,使用二分查找你只須要35次

\[ log_240(億)= 35 \]
\[ log_2100 \approx7 \]編程語言

  1. 那麼咱們如何用另外一種算法來表示,它運算的時間呢?學習

    難不倒咱們偉大的程序員,這裏喲一種叫作大O表示法,一張圖告訴你
    spa

  2. 咱們能夠這樣子去理解,所謂的大O表示法,實際上是 從算法運算的時間增量的角度來衡量的,它沒有單位

例子1:好比下面的例子,有助於你的理解,

假設仍是二分查找和普通的算法,查找一次須要用到1毫秒ms,從n箇中找一個元素,n=100時,普通算法須要的時間是100ms,而二分查找須要的時間約等於7ms,當n=1000時,普通算法是10s,二分查找須要耗費14ms,

有此咱們可使用如下的公式來表示,它們運行的速度

\[ 普通算法:O_(n), \]
\[ 二分算法:O_(log_2n) \]

咱們這裏的()括號裏的數表示的操做數,表示執行這個算法須要操做多少步,或者說操做多少次。

例子2:如今有一個需求,在一張紙上面繪製16個各類,那麼如何用大O表示法,來觀察它的運行速度呢?

算法1:一個一個的去畫,你須要畫16次,
算法2:二分的去畫,只須要畫4次,這個4怎麼得來的呢?咱們能不能用數學表示出來呢?固然能夠,看咱們的公式

\[ log_216=4 \]

因此在例子二中,算法1,2用大O表示法就是

\[ 普通算法:O_(n), \]
\[ 二分算法:O_(log_2n) \]

再說一遍,咱們的運行速度指是運算的時間的增量

1.我這裏指出了參加的大O運行時間

再來一個簡單的例子:
仍是要繪製16個各類,若是如今要求繪製的1024的格子呢?咱們如何用以上的5種表示法表示出來?

  • 實際上,不可能如此乾淨的把大O運行時間轉化爲操做數,就目前來看,這種狀況下的精度就夠了,後面咱們再來深刻的套路大O表示法

2.總結一下

四.有趣的問題(旅行商的問題)

這是一個著名的計算機科學領域的問題,它充分的表示了最後一種大O表示法的運行速度

5、總結

  • 二分查找的速度要快於簡單查找

\[ 普通算法:O_(n),比較慢,並且元素越多越慢 \]
\[ 二分算法:O_(log_2n) \]

  • 算法的運行時間不是s爲單位,而是以其運算的增速角度來度量的
  • 運算時間能夠用大O來表示
相關文章
相關標籤/搜索