博主在市面上發現了不少,不少有關書算法的書籍,可是真正可以讓初學者易懂的算法書籍,只是一點點,如下我講以
Aditya Bhargava寫的一本關於算法的入門書籍,爲參考,這本書很是的優秀,淺顯易懂,圖文並茂!帶你走進算法的世界,要知道,做爲一名優秀的程序員,不會算法是不行滴。
書籍的地址,能夠給博主留言,也能夠加我QQ或者微信,歡迎你和我一塊兒來探討,編程世界的祕密python
所謂的算法是一組完成任務的指令,這個任務能夠是有關數學的,也能夠是有關功能的實現,程序員
算法是計算機的靈魂算法
具體說來,咱們能夠實現編寫跟着用戶的AI系統,編寫推薦系統,固然了還有NP的一些問題。不過呢,準備好掉頭髮了嗎?讓咱們一塊兒來掉頭髮吧!!
所謂的二分查找算法,是一個很是簡單的入門算法,它的目的是加快數據的查找編程
\[ x=log_2 N,2^3=8,log_28=3,log_22^3=3 \]
它指的是若是你在n個要查找的元素中,須要找一個元素,那麼你最多須要x步。數組
特別須要你注意的是:咱們這選用python作爲編程語言,python簡單易學微信
博主比較忙,簡單的代碼就不敲了,複雜一些的會帶着你們敲一下app
\[ log_240(億)= 35 \]
\[ log_2100 \approx7 \]編程語言
那麼咱們如何用另外一種算法來表示,它運算的時間呢?學習
難不倒咱們偉大的程序員,這裏喲一種叫作大O表示法,一張圖告訴你
spa
咱們能夠這樣子去理解,所謂的大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) \]
再說一遍,咱們的運行速度指是運算的時間的增量
再來一個簡單的例子:
仍是要繪製16個各類,若是如今要求繪製的1024的格子呢?咱們如何用以上的5種表示法表示出來?
這是一個著名的計算機科學領域的問題,它充分的表示了最後一種大O表示法的運行速度
\[ 普通算法:O_(n),比較慢,並且元素越多越慢 \]
\[ 二分算法:O_(log_2n) \]