首页 > 编程知识 正文

Python版算法专题

时间:2023-11-20 20:06:21 阅读:302943 作者:GBXH

本文将围绕Python版算法专题展开讨论,从多个方面对其进行详细阐述。

一、排序算法

排序算法是算法领域中的基础问题,Python提供了各种排序算法的实现。

1、冒泡排序(Bubble Sort)

def bubble_sort(arr):
    n = len(arr)
    for i in range(n-1):
        for j in range(n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = bubble_sort(arr)
print(sorted_arr)

2、快速排序(Quick Sort)

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[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 quick_sort(left) + middle + quick_sort(right)

arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = quick_sort(arr)
print(sorted_arr)

二、查找算法

查找算法用于在数据集合中搜索指定元素的位置。

1、二分查找(Binary Search)

def binary_search(arr, target):
    left = 0
    right = len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

arr = [11, 22, 25, 34, 64, 90]
target = 25
index = binary_search(arr, target)
print(index)

2、线性查找(Linear Search)

def linear_search(arr, target):
    for i in range(len(arr)):
        if arr[i] == target:
            return i
    return -1

arr = [64, 34, 25, 12, 22, 11, 90]
target = 25
index = linear_search(arr, target)
print(index)

三、图算法

图算法用于解决图的相关问题,例如最短路径、最小生成树等。

1、广度优先搜索(Breadth-First Search)

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    while queue:
        node = queue.popleft()
        if node not in visited:
            visited.add(node)
            neighbors = graph[node]
            queue.extend(neighbors)
    return visited

graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}
start = 'A'
visited = bfs(graph, start)
print(visited)

2、深度优先搜索(Depth-First Search)

def dfs(graph, start):
    visited = set()
    stack = [start]
    while stack:
        node = stack.pop()
        if node not in visited:
            visited.add(node)
            neighbors = graph[node]
            stack.extend(neighbors)
    return visited

graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D', 'E'],
    'C': ['A', 'F'],
    'D': ['B'],
    'E': ['B', 'F'],
    'F': ['C', 'E']
}
start = 'A'
visited = dfs(graph, start)
print(visited)

四、动态规划算法

动态规划是一种用于解决多阶段决策问题的算法。

1、斐波那契数列(Fibonacci Sequence)

def fibonacci(n):
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(n-1):
        a, b = b, a + b
    return b

n = 10
result = fibonacci(n)
print(result)

2、背包问题(Knapsack Problem)

def knapsack(weights, values, capacity):
    n = len(weights)
    dp = [[0] * (capacity + 1) for _ in range(n + 1)]
    for i in range(1, n + 1):
        for j in range(1, capacity + 1):
            if j < weights[i-1]:
                dp[i][j] = dp[i-1][j]
            else:
                dp[i][j] = max(dp[i-1][j], values[i-1] + dp[i-1][j-weights[i-1]])
    return dp[n][capacity]

weights = [2, 3, 4, 5]
values = [3, 4, 5, 6]
capacity = 8
max_value = knapsack(weights, values, capacity)
print(max_value)

五、字符串算法

字符串算法用于对字符串进行各种操作,例如匹配、替换等。

1、KMP算法

def kmp_search(text, pattern):
    n = len(text)
    m = len(pattern)
    prefix = [0] * m
    j = 0
    for i in range(1, m):
        while j > 0 and pattern[i] != pattern[j]:
            j = prefix[j - 1]
        if pattern[i] == pattern[j]:
            j += 1
        prefix[i] = j
    j = 0
    for i in range(n):
        while j > 0 and text[i] != pattern[j]:
            j = prefix[j - 1]
        if text[i] == pattern[j]:
            j += 1
            if j == m:
                return i - m + 1
    return -1

text = "ABABABACDABABCABAB"
pattern = "ABABCABAB"
index = kmp_search(text, pattern)
print(index)

2、字符串排序(String Sorting)

def string_sort(strings):
    def count_sort(strings, k):
        n = len(strings)
        count = [0] * 26
        output = [''] * n
        for i in range(n):
            if k < len(strings[i]):
                count[ord(strings[i][k]) - ord('a')] += 1
        for i in range(1, 26):
            count[i] += count[i - 1]
        for i in range(n - 1, -1, -1):
            if k < len(strings[i]):
                output[count[ord(strings[i][k]) - ord('a')] - 1] = strings[i]
                count[ord(strings[i][k]) - ord('a')] -= 1
        for i in range(n):
            if k < len(strings[i]):
                strings[i] = output[i]

    max_length = max(len(s) for s in strings)
    for k in range(max_length - 1, -1, -1):
        count_sort(strings, k)
    return strings

strings = ['cat', 'bat', 'mat']
sorted_strings = string_sort(strings)
print(sorted_strings)

通过以上各个方面的阐述,希望读者对Python版算法专题有了更深入的了解。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。