高级算法设计与分析 学习笔记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

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用