Python常用算法:让你的程序更加高效
Python是一个开源、高效、易读易学的编程语言,被广泛应用于数据分析、Web开发、人工智能等领域。然而,在处理大量数据和复杂计算时,Python程序的效率可能不如其他语言,因此,在Python编程中,常用算法的掌握尤为重要。本文将介绍Python中常用的算法及其实现。
1. 排序算法
排序算法是计算机科学中最基本的算法之一,它的作用是将一组数据按照指定的规则进行排列。Python中常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。
冒泡排序:比较相邻的元素。如果第一个比第二个大,就交换它们两个;否则不交换。对每一对相邻元素做同样的工作,从开始第一对到最后一对,这样一趟排序后,最后一个元素一定是最大的数。然后再针对第二个到倒数第二个元素执行同样的操作,直到整个序列有序。
```
def bubbleSort(arr):
n = len(arr)
for i in range(n-1):
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
```
选择排序:每一轮选择出未排好序的数据中最小的数据,将其放到已排好序的数据的末尾。这个过程重复n-1次,即可得到排好序的数据。
```
def selectionSort(arr):
n = len(arr)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
```
插入排序:将一个元素插入到已排好序的序列中,使之成为新的有序序列,直到所有元素都插入完毕。
```
def insertionSort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
```
快速排序:选择一个基准元素,将小于基准元素的放到左边,大于基准元素的放到右边,递归进行排序。
```
def quickSort(arr):
if len(arr) <= 1:
return arr
pivot = arr[int(len(arr)/2)]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quickSort(left) + middle + quickSort(right)
```
2. 查找算法
查找算法是在一组数据中查找指定数据的过程,Python中常用的查找算法包括线性查找、二分查找。
线性查找:遍历数据集合,逐个查找,直到找到指定数据或到达数据结尾。
```
def linearSearch(list, target):
for i in range(len(list)):
if list[i] == target:
return i
return -1
```
二分查找:将数据集合分成两半,判断目标数据在哪一半,逐步缩小数据范围,直到找到目标数据。
```
def binarySearch(list, target):
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high) // 2
if list[mid] == target:
return mid
elif list[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
```
3. 动态规划算法
动态规划算法是解决一类最优化问题的常用方法,它将原问题分解为若干个子问题,并在求解子问题的过程中避免重复计算,以节省计算时间。Python中常用的动态规划算法包括背包问题、最长公共子序列等。
背包问题:有一个固定容量的背包和一些物品,每个物品有自己的重量和价值,在保证不超过背包容量的前提下,如何选择物品使得总价值最大。
```
def knapsack(W, wt, val, n):
K = [[0 for x in range(W+1)] for x in range(n+1)]
for i in range(n+1):
for w in range(W+1):
if i==0 or w==0:
K[i][w] = 0
elif wt[i-1] <= w:
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
else:
K[i][w] = K[i-1][w]
return K[n][W]
```
最长公共子序列:给定两个字符串,找到它们之间最长的公共子序列,返回其长度。
```
def lcs(X, Y):
m = len(X)
n = len(Y)
L = [[None]*(n+1) for i in range(m+1)]
for i in range(m+1):
for j in range(n+1):
if i == 0 or j == 0 :
L[i][j] = 0
elif X[i-1] == Y[j-1]:
L[i][j] = L[i-1][j-1]+1
else:
L[i][j] = max(L[i-1][j], L[i][j-1])
return L[m][n]
```
总结
Python中常用的算法包括排序算法、查找算法和动态规划算法等,这些算法能够有效提高Python程序的效率。在编程中,灵活运用各种算法,将对程序的优化和性能提升起到重要的作用。