基于python的分治法和例题

python语言求排列的逆序数,分支算法实现,复杂度O(nlogn),附完整代码可运行 问题: 考虑1,2,3...n(n<=100000)的排列,比如263451中含有8个逆序(2,1),(3,1),(4,1),(5,1),(6,3),(6,4),(6,5),(6,1),即大的数在小的数的左边,就构成一个逆序对。 现给定1,2,...n的一个排列,求它的逆序数。 解题策略: 笨方法O(n^2) 分治O(nlogn) 分治的实现方法: 数组分为两半,分别求出左半边和... 阅读详情

分治法

分治法的核心

  1. 分:将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题
  2. 治:最后的子问题,可以很容易的直接求解
  3. 合:所有子问题的解合并起来就是原问题的解

分治法的特征

  1. 问题的规模缩小到一定的程度就可以容易地解决
  2. 问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质
  3. 利用该问题分解出的子问题的解可以合并为该问题的解
  4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题

第一条特征:是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加

第二条特征:是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用

第三条特征:是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法

第四条特征:涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好

分治法例题

01. 快速指数

求 x=base^a_www.wityx.com,base为底数,a为指数。

基本思想:对base^a_www.wityx.com分治:

def fast_power(base, a):
    # 指数为0返回1
    if a == 0:
        return 1.0
    # 指数为负数
    elif a < 0:
        return 1 / fast_power(base, -a)
    # 指数为奇数
    elif a % 2:
        return fast_power(base * base, a // 2) * base
    # 指数为偶数
    else:
        return fast_power(base * base, a // 2)

print(fast_power(2, 5)) # 32

02. 搜索峰值

列表没有重复值,但可能存在多个峰值,返回任意一个峰值的index.
你可以想象成 num[0] = num[n] = -∞, 第一位和最后一位为负无穷
def search_peak(alist, start, end):
    if start == end:
        
算法导论第三版 第4章习题答案 2020/10/31:初稿,参考https://ita.skanev.com/,并增加相应的Python代码 4 Divide-and-Conquer 4.1 The maximum-subarray problem 1.What does FIND-MAXIMUM-SUBARRAY return when all elements of A are negative? It will return a single-element array with the largest negative in 阅读详情

相关推荐

算法基础:分治法(基于Python)

本博客所有内容均整理自《算法图解》,欢迎讨论交流~ 有时候,你可能会遇到使用任何已知的算法都无法解决的问题,这种时候,我们就可以试试分治法的思路。 分治法的基本思想很简单,顾名思义,就是将一个大问题分解为若干个子问题,然后我们逐一地解决这些子问题,将所有子问题解决完毕,也就将整体的大问题解决完毕了。 分治法的精髓: 分--将问题分解为规模更小的子问题; 治--将这些规模更小的子问题逐个击...

清水河C罗——Leonardo-Liu 3092

[python] 分治法查找数组元素的最大值和最小值

                              分治法查找数组元素的最大值和最小值   分治法简介:        分治法从字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题解的合并。利用分治算法解决寻找一个数组元素中的最值问题和快速排序算法的过程相似,可以参照着快...

qq_40102757的博客 7413

PYTHON:大整数乘法(分治法)

算法还是很重要的,虽然计算机的处理能力越来越强,但好的算法还是非常重要的。好的算法的执行效率有可能是差算法的很多倍。以排序为例,一般情况下,快速排序就比冒泡排序快很多。算法好,应用程序执行快,用户体验就会好。

weixin_57874507的博客 4230

最大连续子段和的暴力法、分治法和动态规划法求解(Python)

最近正在学习dp,其中一个很经典的例子是==最大连续子段和==。为了打开思路,我就想着用三种方法来求解这个问题的最优解。如果有任何问题,欢迎看文的小伙伴们指正呀~

PeggyLiubq的博客 1919

Python 分治法求假币

目录 前言 思路: 问题: 前言 这个的作业我也折磨了我挺久,分治法作为一个我早就写过的算法这一次写了好久,发现自己对他的边界条件确实还是不够熟悉,还要多进行几次巩固 题目: 有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。 将n个硬币分成数量相同的两堆,如果n为偶数,每堆的硬币个数为n/2; 如果n为奇数,每堆的硬币个数为(n-1)/2,两堆之外还会剩余一个硬币。 将两堆硬币上天平比较重量,如果有一堆较轻,那

weixin_50168558的博客 5401

分治法解决最近点对问题,python实现

分治法解决最近点对算法实现

weixin_52787795的博客 2441

100种算法【Python版】第2篇——分治法

100种算法【Python版】第2篇——分治法

AnFany 811

分治算法 芯片测试.py

芯片测试:蛮力测试和分治策略都有写到,算法按设计与分析课的笔记,博主自己写的,仅仅参考了讲义的伪代码,若有错误请指出,谢谢。 重要的假设:好芯片至少比坏芯片多一片。 测试结果:奇数个芯片√ 偶数个芯片偶尔有错,待加强

递归与分治算法练习

最近刚学习算法设计与分析的课程,所用教材是清华大学出版社王晓东编著的《算法设计与分析》。一道关于递归与分治算法的练习题如下: 刚拿到题目觉得这题目似乎和递归分治没有什么关系,但是O(1)的空间复杂度,以及O(n)的时间复杂度度就限制了解决方法,也就是分治和递归。(使用python语言只需几行,用切片即可完成,这里附上极其弱智的代码) def exchange(a,k): a=a[k:]+a[0:k]#列表切片 return a ls=[1,2,3,4,5,6,7] print(exchange(ls,4)) 现在我们来思考这个递归分治算法。 开始前先说明一下变量含义: st

Python分治法定义与应用实例详解

本文实例讲述了Python分治法定义与应用。分享给大家供大家参考,具体如下: 分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 3) 利用该问题分解出的子问题的解可以合并为该问题的解; 4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加; 第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用; 第三条特征是关键,能否利用分治

基于MYD-YT153与AD7616的16通道高速ADC采集系统实战指南

在嵌入式系统与工业数据采集领域,模拟信号采集是连接物理世界与数字系统的关键技术。其核心原理是通过模数转换器(ADC)将连续的模拟电压信号转换为离散的数字码值,供处理器处理。这项技术的价值在于实现了对温度、压力、振动等关键物理量的精确感知与数字化,是工业自动化、设备监测、科学实验等场景的基石。本文聚焦于**多通道**、**高精度**采集这一常见需求,深入剖析如何利用全志T153处理器的LocalBus并行总线接口,高效驱动ADI的16位、16通道同步采样ADC芯片AD7616,构建一个稳定可靠的高速数据采集系

weixin_30335353的博客 443

YOLOv8魔改网络后训练全零?别慌,关掉AMP混合精度训练试试

本文探讨了YOLOv8魔改网络后训练出现全零指标的问题,指出AMP混合精度训练与自定义网络结构的不兼容性。通过分析梯度消失现象和AMP工作原理,提供了关闭AMP、调整学习率等解决方案,并建议预防性开发实践以避免类似问题。

weixin_28338005的博客 323

以太网详解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介绍

网络设备中肯定离开不MAC和PHY,本篇文章将详细介绍下以太网中一些常见术语与接口。 MAC和PHY结构 从硬件角度来看以太网是由CPU,MAC,PHY三部分组成的,如下图示意: 上图中DMA集成在CPU,CPU,MAC,PHY并不是集成在同一个芯片内,由于PHY包含大量模拟器件,而MAC是典型的数字电路,考虑到芯片面积及模拟/数字混合架构的原因,**将MAC集成进CPU而将PHY留在片外,这种...

sternlycore的博客 13万+

凌欧通用FOC框架解析(5.程序环流程)

结构体:电流内环.这是一个结构体函数占空比13.

weixin_43756295的博客 2936

GEE:基于MODIS数据计算NDVI时间序列,并使用Savatsky-Golay(SG)滤波器对其进行平滑处理

优快云@_养乐多_本文将介绍如何在 Google Earth Engine (GEE) 平台中,使用 MODIS 数据计算 NDVI 时间序列,并对该数据集应用 Savitzky-Golay 滤波器,得到了一个新的平滑后的数据集。Savitzky-Golay 滤波器可以有效地去除信号中的噪声,并平滑信号的变化。该方法可以扩展到基于 MODIS 数据计算的任何指数或者波段。

养乐多的博客 1426

汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)

A2L文件的生成分为两章讲解:本文主要是讲模型开发,讲解如何把标定量、观测量放到链接文件中的指定位置。下一篇讲解如何使用matlab生成完整的A2L文件

认真搞搞汽车MCU 4619

022、Conv-BN-SiLU 基础卷积块:构造函数参数计算,前向传播的 PyTorch 逐行实现

本文详细解析了Conv-BN-SiLU卷积块的实现细节与注意事项。作者从调试经历出发,指出bias参数冗余会导致数值不稳定,强调卷积层应设置bias=False。文章对比了SiLU与ReLU的特性差异,逐行分析了构造函数参数计算(包括自动填充、分组卷积等)和前向传播过程,特别讲解了BN层与SiLU激活的数值特性。最后分享了三个实践中的常见问题:BN的momentum设置、SiLU输出范围的影响,以及分组卷积的通道对齐要求,并提供了卷积与BN融合的推理优化技巧。全文聚焦实际工程实现中的关键细节,具有较强实操指

ai技术增长的博客 218

流体动力学仿真软件:XFlow_(20).案例研究:声学仿真

在流体动力学仿真软件中,声学仿真是一个重要的应用领域。通过数值模拟,工程师和科研人员可以预测和分析流体系统中的声学现象,如气动噪声、声波传播和声场分布。这些仿真结果对于优化设计、降低噪声水平和提高系统性能具有重要意义。本节将详细介绍如何在流体动力学仿真软件中进行声学仿真,包括声学模型的选择、参数设置、后处理分析等内容,并通过具体的案例来说明这些步骤。

kkchenjj的博客 902

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: PRML第一章读书小结
下一篇: 2019,我是如何转向战略成功,并成功跑通一个现金流项目的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值