📜  什么是神奇的词 (1)

📅  最后修改于: 2023-12-03 15:36:11.132000             🧑  作者: Mango

什么是神奇的词

在编程世界里,有一些词语或者概念是特别神奇的,他们能够让我们的程序变得更加优美、高效、有趣。在这里,我将向大家介绍一些我认为神奇的词。

1. 递归

递归是一种非常有趣和强大的编程思维。它指函数直接或间接地调用自身的过程。在实际编程中,通常用递归解决规模变化的问题,比如二分查找、分治算法等。

# Python代码示例:阶乘递归
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)
2. lambda

lambda是Python中的一个非常特殊的关键字,用于简洁的创建匿名函数。它通常用于需要一个函数,但只需要使用一次的场景。lambda函数可以接受任意数量的参数,但只能有一个表达式。

# Python代码示例:lambda函数求平方
square = lambda x: x*x
print(square(5)) # 输出 25
3. 贪心算法

贪心算法是一种基于贪心思想的算法,它是一种在每一步选择中都采取最好或者最优的选择,从而希望能够产生全局最优解的算法。贪心算法通常适用于可以分成子问题来解决,而且子问题的最优解能递推到全局最优解的问题。

# Python代码示例:硬币找零问题
def coinChange(coins, amount):
    coins.sort(reverse=True)
    ans = float('inf')
    def dfs(amount, coin_count, index):
        nonlocal ans
        if amount == 0:
            ans = min(ans, coin_count)
            return
        if index == len(coins):
            return
        coin = coins[index]
        max_count = amount // coin
        for count in range(max_count, -1, -1):
            if coin_count + count + 1 >= ans:
                return
            dfs(amount - count * coin, coin_count + count, index+1)
    dfs(amount, 0, 0)
    return ans if ans != float('inf') else -1
4. 分治算法

分治算法是一种递归的算法思想,其思想是将一个问题分解成多个子问题,并在每个子问题上递归地应用相同的过程,从而得到一个总体的解决方案。通常用于需要将原始问题转换为与其相关的几个子问题的场景。

# Python代码示例:归并排序
def mergeSort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        left = arr[:mid]
        right = arr[mid:]
        mergeSort(left)
        mergeSort(right)

        i = j = k = 0
        while i < len(left) and j < len(right):
            if left[i] < right[j]:
                arr[k] = left[i]
                i += 1
            else:
                arr[k] = right[j]
                j += 1
            k += 1
        while i < len(left):
            arr[k] = left[i]
            i += 1
            k += 1
        while j < len(right):
            arr[k] = right[j]
            j += 1
            k += 1
5. 动态规划

动态规划是一种将原问题分解成相对简单的子问题来解决的方法。在一些需要进行大量重复计算的问题中,动态规划可以大大减少计算时间。常用于需要求解最优解或者最大值最小值等问题的场景。

# Python代码示例:背包问题
def knapsack(weight, values, max_weight):
    n = len(weight)
    dp = [[0 for _ in range(max_weight+1)] for _ in range(n+1)]
    for i in range(1, n+1):
        for j in range(1, max_weight+1):
            if weight[i-1] > j:
                dp[i][j] = dp[i-1][j]
            else:
                dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i-1]] + values[i-1])
    return dp[-1][-1]