发布时间:2023-09-27 08:30
什么是算法?
算法是一组完成任务的指令。
速度快/可以解决有趣的问题的算法是我们本书研究的重点:
学习比较不同算法的优缺点——体会到改用不同的数据结构就可以让结果大不相同
本书将带我们学习一些问题解决技巧
读完本书 你将 熟悉一些使用最为广泛的算法。利用这些新学到的知识,你可以学习更具体的AI算法、数据库算法。
二分查找是一种算法,其输入是一个有序的元素列表。
如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null
随便想一个1-100的数字
目的:最少的次数猜到这个数字。
怎么做到呢?
是这种方法么?
nonono
这种方法才对哦
不管要猜1-100之间的哪个数字 在7次之内都能通过二分法猜到~
结论:
对于包含n个元素的列表 用二分查找最多需要步
函数binary_search接受一个有序数组和要搜索的元素。如果此元素包含在数组中,这个函数将返回其位置。
具体逻辑如下:
def binary_search(list, item):
low = 0
high = len(list) - 1
#low 和 high 用来跟踪要在其中查找的列表部分
while low <= high: #范围缩小到只剩一个元素为止(如果再找不到那只能return None咯~)
mid = (low + high) // 2
guess = list[mid]
if guess == item:
return mid # 找到这个元素啦~
if guess > item:
high = mid - 1 #list[mid]太大了! 上限是比list[mid]小一丢丢的那个数
if guess < item:
low = mid + 1 #list[mid]太小了! 下限是比list[mid]大一丢丢的那个数
return None#没有找到指定元素
if __name__ == \"__main__\":
#测试用的主函数~
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 7))
print(binary_search(my_list,-1))
这里是 《图解算法》给出的标准答案
给出两种二分法的算法~
更多原书给出的代码戳这个链接下载 ~
多跑一跑嘿嘿嘿
class BinarySearch():
def search_iterative(self, list, item):
# low and high keep track of which part of the list you\'ll search in.
low = 0
high = len(list) - 1
# While you haven\'t narrowed it down to one element ...
while low <= high:
# ... check the middle element
mid = (low + high) // 2
guess = list[mid]
# Found the item.
if guess == item:
return mid
# The guess was too high.
if guess > item:
high = mid - 1
# The guess was too low.
else:
low = mid + 1
# Item doesn\'t exist
return None
def search_recursive(self, list, low, high, item):
# Check base case
if high >= low:
mid = (high + low) // 2
guess = list[mid]
# If element is present at the middle itself
if guess == item:
return mid
# If element is smaller than mid, then it can only
# be present in left subarray
elif guess > item:
return self.search_recursive(list, low, mid - 1, item)
# Else the element can only be present in right subarray
else:
return self.search_recursive(list, mid + 1, high, item)
else:
# Element is not present in the array
return None
if __name__ == \"__main__\":
# We must initialize the class to use the methods of this class
bs = BinarySearch()
my_list = [1, 3, 5, 7, 9]
print(bs.search_iterative(my_list, 7)) # => 1
# \'None\' means nil in Python. We use to indicate that the item wasn\'t found.
print(bs.search_iterative(my_list, -1)) # => None
我们来画个图 举个栗子感受一下
ps:最后那个算法是什么鬼哦
下面我们就来看看这个时间复杂度为的算法~
旅行商问题是一个运行时间极长的算法。这个算法要解决的是计算机科学领域非常著名的旅行商问题,其计算时间增加得非常快,而有些非常聪明的人都认为没有改进空间。
入门算法的一个基础小章节 呼~来总结一下