算法图解1_5

算法图解是一本非常简单入门的算法书,算法基于python语言,简单易懂,非常好学。不到200页,学习压力也不大,入门第一步就是它了。

算法图解

二分法查找

def binary_search(list,item):
    low = 0
    high = len(list) - 1

    while low <= high:
        mid = (low + high )// 2
        guess = list[mid]
        if guess==item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None
my_list = [1,3,5,7,9]
print(binary_search(my_list,3))
print(binary_search(my_list,9))

1.1 128个名字的有序列表二分法需要log128 = 7

1.2 翻倍之后需要8

大O表示法

  • 大O表示法指出了最糟情况下的运行时间,算法的快慢指的是并非时间,而是操作数的增加;谈论算法的速度时,我们说随着输入的增加,其运行时间以什么样的速度增加。

  • O(n!)在面对旅行者挑选最优解的时候遇到的算法是非常快的增加,这个我们提出来非常高的难度。

  • 大O表示法通常会把常数省略掉

数组和链表

O 数组 链表
删除 O(n) O(1)
读取 O(1) O(n)
插入 O(n) O(1)

链表擅长插入和删除,而数组擅长随机访问。

Facebook使用的是一种混合数据结构:链表数组

选择排序

选择排序的O(n^2)

def findSmallest(arr):
	smallest = arr[0]
	smallest_index = 0
	for i in range(1,len(arr)):
		if arr[i]<smallest:
			smallest = arr[i]
			smallest_index = i
	return smallest_index
def selectionSort(arr): 
	newArr = []
	for i in range(len(arr)):
		smallest = findSmallest(arr)
		newArr.append(arr.pop(smallest))
	return newArr
print(selectionSort([5,3,6,2,10]))

递归

  • 递归需要注意:基线条件和递归条件;
  • 所有的函数调用都进入调用栈,调用栈可能很长,占用大量的内存空间(注意);
  • 使用尾递归(高级算法);
  • 循环要比递归运算更加快速,递归更加易懂
>>> def fact(x):
	if x == 1:
		return x
	else:
		return x*fact(x-1)

快速排序(review)

设计数组递归的时候,通常基线的设置在于[]或者只含有一个元素。

O(nlogn)

def sum(arr):
	if len(arr) == 0:
		return 0
	return arr[0]+sum(arr[1:])
def count(list):
	if list == []:
		return 0
	return 1+count(list[1:])
def quicksort(arr):
    if len(arr)<2:
        return  arr
    pivot = arr[0]
    less = [i for i in arr[1:] if i <= pivot] 
    greater = [i for i in arr[1:] if i > pivot]
    return  quicksort(less) + [pivot] + quicksort(greater)
print(quicksort([10,5,2,3]))
# wow,amazing i love python so much in this way

散列表

哈希表:对于同样的输入,散列表必须返回同样的输出;

如果存储在散列表中的同一个位置的时候,就会出现添加一条链表;

良好的散列表需要两个特点:

  • 较低的填充因子
  • 良好的散列函数

github网站

勘误网站

发布了11 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xiaownezi666/article/details/85223410