- 算法學習指南
- (美)喬治·海涅曼
- 451字
- 2022-12-20 19:03:05
1.3 對關鍵操作進行計數
由于最大值實際上肯定包含在A
中,因此程序清單1-2中正確的largest()
函數先選擇A
的第1個值作為my_max
,再對其他值進行檢查,查找是否有其他值比它更大。
程序清單1-2 在列表中查找最大值的正確函數
def largest(A):
my_max = A[0] ?
for idx in range(1, len(A)): ?
if my_max < A[idx]:
my_max = A[idx] ?
return my_max
? 把my_max
設置為A
中位于索引位置0的第1個值。
? idx
取1
~len(A)
(不包括后者)的整數。
? 如果A[idx]
的值更大,就更新my_max
。
如果對空列表調用
largest()
或max()
,將會觸發一個異?!癡alueError:List index out of range exception”。這類運行時異常是程序員所犯的錯誤,說明他們沒有理解largest()
所操作的列表至少要包含一個值。
既然我們已經擁有了這個算法的一種正確的Python實現,能不能確定這個新算法調用小于操作的次數呢?能!就是N?1次。我們修正了算法的缺陷,并提高了它的性能(當然,只是提高了微不足道的一點)。
為什么對小于操作的使用進行計數很重要呢?因為它是對兩個值進行比較時所使用的關鍵操作。其他所有程序語句(例如for
或while
循環)在不同的實現中可以根據實際所使用的編程語言任意選擇。我們將在第2章對這個思路進行擴展,目前只要對關鍵操作進行計數就足夠了。