加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

几个简单的算法

发布时间:2020-12-13 20:55:04 所属栏目:百科 来源:网络整理
导读:一、时间复杂度 1.用来评估算法运行效率的一个东西。 2.一般来说,时间复杂度高的算法比复杂度低的算法慢 3.常见的时间复杂度(效率排序) o(1) 4.不常见的时间复杂度 o(n!)/o(2^n)/o(n^n) 5.如何一眼判断时间复杂度? -循环的过程中出现了循环减半-----o(log

一、时间复杂度

  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(%-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.快速排序 

left <=-1+1= left< left data[right] >=-=1= left data[left]<=+=1== left

  5.堆排序

== 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问题

= 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读