算法   发布时间:2019-10-29  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了几个简单的算法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

一、时间复杂度

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

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

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

  o@R_262_11269@

  4.不常见的时间复杂度

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

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

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

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

二、空间复杂度

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

  2."空间换时间"

三、递归

  1、递归的两个特点:

    -调用自身

    -有结束条件

四、列表查找

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

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

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

title="几个简单的算法" alt="几个简单的算法" src="https://cn.js-code.com/res/2019/02-25/18/40f50b5fcbccce9214be34b44c9ed8fe.png" >

  2.顺序查找

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

  3.二分查找

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

li = list(range(0,1000,2)) value): value): low == 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.汉诺塔问题

C): n>-1(%C)) hanota(n-1C) 1个圆盘从A经过C移动到B 2.把第n个圆盘从A移动到C 3.把n-1个小圆盘从B经过A移动到C 汉诺塔移动次数的递归式:h(X) = 2h(x-1)+1

五、排序方法

  1.冒泡排序

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

<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.选择排序

SELEct_sort(li): i range(len(li)-1= j range(i+1 lI[j]<I[min_loc]: min_loc = min_loc ! =I[i],lI[min_loc]=I[min_loc],lI[i]

  3.插入排序

i range(1=I[i] j = i-1 j>=0 tmp<I[j]: lI[j+1]=I[j] j=j-1I[j+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[0],data[i] =[0] sift(data,i-1)

  #python内置排序--heapq

    -heapify(X)

    -heappush(heap,item)

    -heappop(heap)

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

  堆---优先队列

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

  #Top-k问题

=I[0:k] i range(k//2-1,-1-1 i [0] =I[i] sift(heap,k-1 i range(k-1,-1[0],heap[i] =[0] sift(heap,i-1)

  6.归并排序

  

== mid+1= i <=mid j <= lI[i]<=I[j]: ltmp.append(lI[i]) i+=1 I[j]) j+=1 i <=I[i]) i+=1 j<=I[j]) j+=1I[low:high+1] = low<= (low+high)//2

大佬总结

以上是大佬教程为你收集整理的几个简单的算法全部内容,希望文章能够帮你解决几个简单的算法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:
猜你在找的算法相关文章