首页 > 编程知识 正文

Python算法学习总结

时间:2023-11-22 14:19:26 阅读:302221 作者:OSHS

Python算法学习总结是一个包含重要的原理、技巧和实践经验的详细总结。本文将从多个方面对Python算法学习进行阐述,帮助读者更好地掌握和应用Python算法。

一、基础算法

1、排序算法:排序算法是算法学习中最基础、常见的一类算法。常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。以下是快速排序的Python实现代码示例:

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 = [4, 2, 5, 1, 3]
print(quick_sort(arr))

2、查找算法:查找算法用于在给定数据集中查找特定元素。常见的查找算法包括线性查找、二分查找、哈希查找等。以下是二分查找的Python实现代码示例:

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

arr = [1, 2, 3, 4, 5]
target = 3
print(binary_search(arr, target))

二、常用数据结构

1、数组:数组是一种线性数据结构,由相同类型的元素按顺序组成。在Python中,我们可以使用列表(list)来表示数组。以下是创建和访问列表的Python代码示例:

arr = [1, 2, 3, 4, 5]
print(arr[0])  # 输出第一个元素
arr.append(6)  # 在末尾添加一个元素
print(arr)     # 输出[1, 2, 3, 4, 5, 6]

2、链表:链表是一种非连续的数据结构,由节点按照地址指向的方式连接而成。在Python中,我们可以使用类来表示链表。以下是创建和遍历链表的Python代码示例:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

# 创建链表
head = ListNode(1)
node1 = ListNode(2)
node2 = ListNode(3)
head.next = node1
node1.next = node2

# 遍历链表
cur = head
while cur:
    print(cur.val)
    cur = cur.next

三、动态规划算法

1、背包问题:背包问题是一个经典的动态规划问题,常见的类型有01背包、完全背包、多重背包等。以下是求解01背包问题的Python实现代码示例:

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] = max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1])
            else:
                dp[i][j] = dp[i - 1][j]
    return dp[n][capacity]

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

2、最长公共子序列:最长公共子序列是动态规划中另一个重要的问题,用于求解两个序列的最长公共子序列。以下是求解最长公共子序列的Python实现代码示例:

def longest_common_subsequence(text1, text2):
    m, n = len(text1), len(text2)
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if text1[i - 1] == text2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + 1
            else:
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
    return dp[m][n]

text1 = "abcde"
text2 = "ace"
print(longest_common_subsequence(text1, text2))

四、图算法

1、深度优先搜索:深度优先搜索是图遍历的一种常用算法,通常使用递归或栈来实现。以下是使用递归实现深度优先搜索的Python代码示例:

def dfs(graph, node, visited):
    if visited[node]:
        return
    visited[node] = True
    print(node)
    for neighbor in graph[node]:
        dfs(graph, neighbor, visited)

graph = {0: [1, 2], 1: [2], 2: [3], 3: [1, 2]}
visited = [False] * 4
dfs(graph, 0, visited)

2、最短路径算法:最短路径算法用于求解图中两个节点之间的最短路径。其中,Dijkstra算法是最常用且简单的一种最短路径算法。以下是使用Dijkstra算法求解最短路径的Python代码示例:

import heapq

def dijkstra(graph, start):
    n = len(graph)
    distance = [float('inf')] * n
    distance[start] = 0
    pq = [(0, start)]
    while pq:
        dis, node = heapq.heappop(pq)
        if dis > distance[node]:
            continue
        for neighbor, weight in graph[node]:
            new_dis = dis + weight
            if new_dis < distance[neighbor]:
                distance[neighbor] = new_dis
                heapq.heappush(pq, (new_dis, neighbor))
    return distance

graph = {0: [(1, 2), (2, 4)], 1: [(2, 1), (3, 7)], 2: [(3, 3)], 3: []}
start = 0
print(dijkstra(graph, start))

通过以上的阐述,我们对Python算法学习总结有了更深入的理解。希望这些示例代码和思路能够帮助你在学习和应用Python算法时更加得心应手。

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