匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python常用算法:让你的程序更加高效

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程序的效率。在编程中,灵活运用各种算法,将对程序的优化和性能提升起到重要的作用。