高级算法设计与分析 学习笔记1 递归与分治法 复杂度计算 大数乘法

本文主要是介绍高级算法设计与分析 学习笔记1 递归与分治法 复杂度计算 大数乘法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本章的目录:

排序问题的示例与分析:递归与分治

插入排序:

类似于排序扑克牌。先把第一个元素当成已排序序列,然后把第二个纳入,用一次插入排序,然后将第三个纳入……

插入排序性能分析

大O表示上界,最差情况不外如是。

欧米噶表示下限,最好情况。

这里的上界下界一般都是确界,是刚刚好的情况,不是随便选一个特别大或者特别小的情况就可以。

中间有一杠的O,表示其上界下界都可以用一个级别的函数表示(只有系数差距,没有质变)

小o表示上界是f(n),且下界不是f(n)

对付大批量数据,还是要用分治法:

我们可以简单发现归并排序复杂度是log2n级别的。但是如果这个表达式是更加复杂的版本呢?

复杂度计算法:

方法一:猜一个式子,然后用数学归纳法验证它。

先假设在0<n<n0的时候T(n)<=cn^3,把式子带进去。

可以看到只要c随便取一个比2大的数,就可以轻松秒杀任意的n0,绝杀无解。不过n^3有点太大了吧?

cn^2+n绝无可能比cn^2小,没办法了吗?好像差距不大啊:

这里再举一个例子:

下面这种算法是

递归树法:

先写上可以确定的作为最上层的,叶子就是还不确定,要接着算的,然后就接着拆开……

主方法

注意这种方法专门针对这种形式,是这种问题的简单解法。

这样求解公式被分成了两个部分。

如果f(n)比较小(真小的那种,不能是相当,而且是n^某某次方(不是无穷小,/lgn啥的不行))那就就是以n^logb(a)为主

如果二者相当,那就是n^logb(a) * lg(n)

如果f(n)比较大且占据n^*级别优势,那就是f(n)为主。这个条件比较苛刻,还要求af(n/b) <= cf(n)  (c要小于1!,n要大)

注意这里的都是带等号的O!上下界都是这个,是很强的结论

我们举几个例子:

最后一个例子中,虽然是f(n)比较小,应该是第一种情况,但小得不够多,不构成n^*级别优势,所以不成。

三种方法中,最后这种主方法是最重要的。

大整数乘法

XY的乘法式子可以改写成两种形式:

改写成下面两种形式只需要3次乘法(原版要4次)实际上一般用1方法,先做减法比较好。

这篇关于高级算法设计与分析 学习笔记1 递归与分治法 复杂度计算 大数乘法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120688

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列