基础算法(python)
来源:互联网 发布:淘宝助理批量编辑宝贝 编辑:程序博客网 时间:2024/06/07 16:51
分治法-最大子数组问题
def FindMaxCrossingSubarray(A,low,mid,high): leftsum=-float('INF') su=0 for i in range(mid,low-1,-1): su+=A[i] if leftsum<su: leftsum=su maxleft=i rightsum=-float('INF') su=0 for i in range(mid+1,high+1): su+=A[i] if rightsum<su: rightsum=su maxright=i return (maxleft,maxright,leftsum+rightsum)def FindMaximumSubarray(A,low,high): if low==high: return (low,high,A[low]) else: mid=(low+high)/2 (leftlow,lefthigh,leftsum)=FindMaximumSubarray(A,low,mid) (rightlow,righthigh,rightsum)=FindMaximumSubarray(A,mid+1,high) (crosslow,crosshigh,crosssum)=FindMaxCrossingSubarray(A,low,mid,high) if leftsum>=rightsum and leftsum>=crosssum: return (leftlow,lefthigh,leftsum) elif rightsum>=leftsum and rightsum>=crosssum: return (rightlow,righthigh,rightsum) else: return (crosslow,crosshigh,crosssum)
归并排序
def MergeSort(A,p,r): if p<r: q=(p+r)/2 MergeSort(A,p,q) MergeSort(A,q+1,r) Merge(A,p,q,r)def Merge(A,p,q,r): L=[];R=[] for i in range(q-p+1): L.append(A[p+i]) for i in range(r-q): R.append(A[q+1+i]) i=0;j=0 L.append(float('INF'));R.append(float('INF')) res=[] for k in range(p,r+1): if L[i]<=R[j]: A[k]=L[i] i+=1 else: A[k]=R[j] j+=1
堆排序
def MaxHeapify(A,i,heapsize): left=2*i+1;right=2*i+2 if left<heapsize and A[left]>A[i]: largest=left else: largest=i if right<heapsize and A[right]>A[largest]: largest=right if largest!=i: A[i],A[largest]=A[largest],A[i] MaxHeapify(A,largest,heapsize)def BuildMaxHeap(A,heapsize): for i in range((len(A)-1)/2,-1,-1): MaxHeapify(A,i,heapsize)def HeapSort(A): heapsize=len(A) BuildMaxHeap(A,heapsize) for i in range(len(A)-1,0,-1): A[0],A[heapsize-1]=A[heapsize-1],A[0] heapsize-=1 MaxHeapify(A,0,heapsize)
快速排序
def Partition(A,p,r): x=A[r] i=p-1 for j in range(p,r): if A[j]<=x: i+=1 A[i],A[j]=A[j],A[i] A[i+1],A[r]=A[r],A[i+1] return i+1def QuickSort(A,p,r): if p<r: q=Partition(A,p,r) QuickSort(A,p,q-1) QuickSort(A,q+1,r)
快速排序的Hoare划分
def HoarePartition(A,p,r): x=A[r] i=p;j=r while 1: while i<r and A[i]<x: i+=1 while j>p and A[j]>=x: j-=1 if i<j: A[i],A[j]=A[j],A[i] else: A[r],A[i]=A[i],A[r] return jdef QuickSort(A,p,r): if p<r: q=HoarePartition(A,p,r) QuickSort(A,p,q) QuickSort(A,q+1,r)
快速排序的随机化版本
import randomdef Partition(A,p,r): x=A[r] i=p-1 for j in range(p,r): if A[j]<=x: i+=1 A[i],A[j]=A[j],A[i] A[i+1],A[r]=A[r],A[i+1] return i+1def RandomizedPartition(A,p,r): i=random.randint(p,r) A[i],A[r]=A[r],A[i] return Partition(A,p,r)def RandomizedQuickSort(A,p,r): if p<r: q=RandomizedPartition(A,p,r) RandomizedQuickSort(A,p,q-1) RandomizedQuickSort(A,q+1,r)
计数排序
def CountingSort(A,B,k): C=[0 for i in range(k+1)] for i in range(len(A)): C[A[i]]+=1 for i in range(1,k+1): C[i]+=C[i-1] for i in range(len(A)-1,-1,-1): B[C[A[i]]-1]=A[i] C[A[i]]-=1
选择算法(找第k小的数)
import randomdef Patition(A,p,r): x=A[r] i=p-1 for j in range(p,r): if A[j]<=x: i+=1 A[i],A[j]=A[j],A[i] A[r],A[i+1]=A[i+1],A[r] return i+1def RandomizedPatition(A,p,r): i=random.randint(p,r) A[r],A[i]=A[i],A[r] return Patition(A,p,r)def RandomizedSelect(A,p,r,i): if p==r: return A[p] q=RandomizedPatition(A,p,r) k=q-p if i==k: return A[q] elif i<k: return RandomizedSelect(A,p,q-1,i) else: return RandomizedSelect(A,q+1,r,i-k-1)
阅读全文
0 0
- Python 基础算法
- 基础算法(python)
- 几个Python中的基础算法
- Python基础算法/剑指offer
- 基础算法的Python实现
- Python 算法基础 排序实现
- 【Python】Python基础排序算法实现
- 《算法基础》所有算法的Python实现
- 【python新手】---基础算法(1)
- Python程序设计基础 数据结构与算法习题
- 熟悉Python的各种基础小算法
- 基础机器学习算法Python实现
- 基础算法——查找(二分法)(python)
- python基础实例5:排序算法
- Openev3 python基础学习4——基础滤波算法
- 七月算法课程《python爬虫》第二课: Python基础
- 算法导论详解(1) 第二章算法基础+python实现
- [Python脚本]——基础算法篇之查找
- Java知识(static修饰符和fina修饰符l)
- Tendermint: 共识概览
- ECMAScript 6 入门
- Linux下安装配置带SASL认证的Memcached
- 关于节点的属性
- 基础算法(python)
- 转载
- codeforces 305A Strange Addition (模拟)
- POJ
- Flask-URL管理
- C#委托的匿函数与lambda公式
- Java数据结构02----线性表与顺序表
- MySQL中出现Access denied for user '**'@'localhost' (using password: YES)
- react-addons-perf 性能优化工具使用