微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

几个简单的算法

一、时间复杂度

  1.用来评估算法运行效率的一个东西。

  2.一般来说,时间复杂度高的算法比复杂度低的算法慢

  3.常见的时间复杂度(效率排序)

  o(1)

  4.不常见的时间复杂度

  o(n!)/o(2^n)/o(n^n)

  5.如何一眼判断时间复杂度?

  -循环的过程中出现了循环减半-----o(logn)

  -几次n的循环就是n的几次方的复杂度

二、空间复杂度

  1.空间复杂度:用来评估算法内存占用大小的一个式子

  2."空间换时间"

三、递归

  1、递归的两个特点:

    -调用自身

    -有结束条件

四、列表查找

  1.列表查找:从列表中查找指定元素

    -输入:列表、待查找元素。->无序列表

    -输出:元素下标或未查找到元素。有序列表

  2.顺序查找

    -从列表第一个元素开始,顺序进行搜索,知道找到为止

  3.二分查找

    -从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。

li = list(range(0,1000,2)) == len(li)-1 low <== (low+high)//2 data_set[mid] == data_set[mid] >= mid-1 = mid+1  else:    return None low<== (low+high)//2 data_set[mid]== data_set[mid]> bin_search_rec(data_set,mid-1 bin_search_rec(data_set,mid+1

  4.汉诺塔问题

n>-1(%s to %s%-1次数的递归式:h(x) = 2h(x-1)+1

五、排序方法

  1.冒泡排序

i range(len(li)-1 j range(len(li)-i-1 li[j]>li[j+1+1] = li[j+1

<span style="color: #800000">"""<span style="color: #800000">
优化
<span style="color: #800000">"""
<span style="color: #0000ff">def<span style="color: #000000"> bubble_sort_1(li):
<span style="color: #0000ff">for i <span style="color: #0000ff">in range(len(li)-1<span style="color: #000000">):
exchange =<span style="color: #000000"> False
<span style="color: #0000ff">for j <span style="color: #0000ff">in range(len(li)-i-1<span style="color: #000000">):
<span style="color: #0000ff">if li[j]>li[j+1<span style="color: #000000">]:
li[j],li[j]
exchange =<span style="color: #000000"> True
<span style="color: #0000ff">if <span style="color: #0000ff">not<span style="color: #000000"> exchange:
<span style="color: #0000ff">return

  2.选择排序

i range(len(li)-1= j range(i+1 li[j]<= min_loc ! ==

  3.插入排序

一个元素 -每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空 i range(1== i-1 j>=0 tmp<+1]==j-1+1]=

  4.快速排序 

一个元素p(第一个元素),使元素p归位; -列表被p分为两部分,左边都比p小,右边都比p大; -递归完成排序 left <=-1+1= left< left data[right] >=-=1= left data[left]<=+=1== left

  5.堆排序

一个元素放到堆顶,此时可通过一个次 调整重新使堆有序 4.堆顶元素为第二大元素 5.重复步骤3,知道堆变空 == 2*2+1 j<= j data[j]+=1 tmp <=== 2*i+1 == i range(n//2-1,-1,-1-1 i range(n-1,-1=-1)

  #python内置排序--heapq

    -heapify(x)

    -heappush(heap,item)

    -heappop(heap)

  优先队列:一些元素的集合,pop操作每次执行都会从优先队列中弹出最大(或最小)的元素

  堆---优先队列

= value [heappop(h) i range(len(h))]

  #Top-k问题

解决思路 -取列表前k个元素建立一个小根堆。堆顶就是目前第k大的数。 -依次向后遍历原列表,对于列表中的元素,如果小于堆顶,则忽略该元素;如果大于堆顶,则将堆顶更换为该元素,并且对堆进行一次调整。 -遍历列表所有元素后,倒序弹出堆顶。 = i range(k//2-1,-1-1 i =-1 i range(k-1,-1=-1)

  6.归并排序

  

== mid+1= i <=mid j <= li[i]<=+=1 +=1 i <=+=1 j<=+=1+1] = low<= (low+high)//2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐