高级算法设计与分析 学习笔记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中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,