日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法图解第一章笔记与习题(算法简介)

發(fā)布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法图解第一章笔记与习题(算法简介) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

算法圖解第一章筆記與習題(算法簡介)

文章目錄

  • 算法圖解第一章筆記與習題(算法簡介)
    • 1.2 二分查找
    • 1.3大$O$表示法
    • 1.4 小結(jié)
    • 練習
        • 習題1.1
        • 習題1.2
      • 使用大$O$表示法給出下述各種情形的運行時間。(電話簿以姓氏排序)
        • 習題1.3
        • 習題1.4
        • 習題1.5
        • 習題1.6

1.2 二分查找

def binary_search(list, item):# low 和 high 用于跟蹤要在其中查找的部分low = 0high = len(list) - 1# 只要范圍沒有縮小到只有一個元素,就繼續(xù)循環(huán)while low <= high:# 檢查中間的元素mid = (low + high) // 2 # 這里注意下,必須是 // 而不是 /,否則不會自動取整,在list中取非整數(shù)則會報錯。guess = list[mid]# 如果猜的數(shù)是對了,返回結(jié)果if guess == item:return mid# 如果猜的數(shù)大了,上限減1if guess > item:high = mid - 1# 如果猜的數(shù)小了,下限加1else:low = mid + 1# 如果沒有這個元素,返回Nonereturn Nonemy_list = [1, 3, 5, 7, 9] ##測試數(shù)據(jù)


1.3大OOO表示法

OOO表示法指出的是最糟情況下的運行時間

下面按從快到慢的順序列出經(jīng)常遇到的5種大O運行時間:

  • O(log?n)O(\log n)O(logn):對數(shù)時間,這樣的算法包括二分查找。
  • O(n)O(n)O(n):線性時間,這樣的算法包括簡單查找。
  • O(n?log?n)O(n * \log n)O(n?logn):這樣的算法包括快速排序。
  • O(n2)O(n^2)O(n2):這樣的算法包括選擇排序。
  • O(n!)O(n!)O(n!):這樣的算法包括旅行商問題的解決方案。

算法的速度指的并非時間,而是操作數(shù)的增速!


1.4 小結(jié)

  • 二分查找的速度比簡單查找要快許多,數(shù)據(jù)越大,差距就越明顯。
  • O(log?n)O(\log n)O(logn)O(n)O(n)O(n)快。需要搜索的元素越多,前者比后者就快得越多。
  • 算法運行時間并不以秒為單位。
  • 算法運行時間是從其增速的角度來度量的。
  • 算法運行時間用大OOO表示法表示。

練習

習題1.1

  • 假設有一個包含128個名字的有序列表,你要使用二分查找在其中查找一個名字,請問最多需要幾步才能找到?

log?2128=7步\log_2128=7步log2?128=7

習題1.2

  • 上面列表的長度翻倍后,最多需要幾步?

log?2256=8步\log_2256=8步log2?256=8

  • 使用大OOO表示法給出下述各種情形的運行時間。(電話簿以姓氏排序)

習題1.3

  • 在電話簿中根據(jù)名字查找電話號碼。

二分查找,為O(log?2n)O(\log_2 n)O(log2?n)

習題1.4

  • 在電話簿中根據(jù)電話號碼查找人。(提示:你必須查找整個電話簿。)

簡單查找,為O(n)O(n)O(n)

習題1.5

  • 閱讀電話簿中每個人的電話號碼。

簡單查找,為O(n)O(n)O(n)

習題1.6

  • 閱讀電話簿中姓名以A打頭的人的電話號碼。這個問題比較棘手,它涉及到第4章的概念。答案可能讓你感到驚訝!

簡單查找,同時,因為大OOO表示法沒有常數(shù)部分,因此O(n26)O(\frac n{26})O(26n?)直接被看作為O(n)O(n)O(n)

總結(jié)

以上是生活随笔為你收集整理的算法图解第一章笔记与习题(算法简介)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。