【算法复习】分治算法

分治算法

写在前面的话

本文是本学渣因为考试需要写的一篇总结,只总结了需要考察的考点,所以可能有的内容引申的不多,请见谅。

一、思想:分而治之

分(Divide): 递归解决较小的问题,直到终止层或者可以解决的时候停下来
治(Conquer): 递归求解,如果问题够小直接求解
合并(Combine): 用子问题的解合并构建父问题

二、归并排序:

img

# 归一化
def merge_sort(nums, begin, end):
    if begin < end:
    mid = (begin + end) // 2
    merge_sort(nums, begin, mid)
    merge_sort(nums, mid + 1, end)
    merge(nums, begin, mid, end)
    
# 合并化
def merge(nums, begin, mid, end):
    left_cur, right_cur = begin, mid + 1
    merged_nums = []
    while left_cur <= mid and right_cur <= end:
        if nums[left_cur] < nums[right_cur]:
            merged_nums.append(nums[left_cur])
            left_cur += 1
        else:
            merged_nums.append(nums[right_cur])
            right_cur += 1
    if left_cur <= mid:
        merged_nums.extend(nums[left_cur:mid + 1])
    else:
        merged_nums.extend(nums[right_cur:end + 1])
    nums[begin:end + 1] = merged_nums
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值