当前位置: 首页 > news >正文

1.1.7 master公式的使用

code 递归例子 – 返回最大数据

# 递归行为, 返回[L, R]的最大值
# 递归:base case; 遍历;返回值
from test1 import *def getMax(arr):return process(arr, 0, len(arr)-1)def process(arr, L, R):if (L == R):return arr[L]    # base casemid = L + ((R - L) >> 1)   # 中点, 避免溢出  L + (R - L) // 2; 位运算加速leftMax = process(arr, L, mid)rightMax = process(arr, mid + 1, R)return max(leftMax, rightMax)arr = generateRandomArray(maxSize=100, maxValue=100)
printArray(arr)
max1 = getMax(arr)

例子

arr = [3, 2, 5, 6, 7, 4]
ind = [0, 1, 2, 3, 4, 5]
调用过程: 递归的调用。系统栈=压栈p(0, 5)p(0, 2)                 p(3,5)    p(0,1)      p(2,2)       p(3,4)      p(5,5)
p(0,0) p(1,1)           p(3,3)  p(4,4)    

master公式的使用

剖析递归行为和递归行为时间复杂度的估算
用递归方法找一个数组中的最大值,系统上到底是怎么做的?
master公式的使用
T ( N ) = a ∗ T ( N / b ) + O ( N d ) T(N) = a*T(N/b) + O(N^d) T(N)=aT(N/b)+O(Nd)

  1. log(b,a) > d -> 复杂度为O(N^log(b,a))
  2. log(b,a) = d -> 复杂度为O(N^d * logN)
  3. log(b,a) < d -> 复杂度为O(N^d)

T ( N ) T(N) T(N): 母问题的数据量是 n n n级别;
T ( N / b ) T(N/b) T(N/b): 子问题的规模都是等分为 b b b份;每份是 N / b N/b N/b的规模;
a a a: 子问题被调用了几次;
O ( N d ) O(N^d) O(Nd): 除去子问题的调用外,剩余的操作的时间复杂度。

T(N) = a * T(N/b) + O(N^d)
母       次数  子问题    额外

满足上面几点就可以使用master公式。

getMax(arr)函数的调用:
T ( N ) = 2 ∗ T ( N / b ) + O ( 1 ) T(N) = 2 * T (N / b) + O(1) T(N)=2T(N/b)+O(1)


http://www.mrgr.cn/news/82630.html

相关文章:

  • 移动端开发:响应式设计与适配技巧
  • 我用Ai学Android Jetpack Compose之TextField
  • DAY1 shell指令
  • 2025运维故障记 1 | 1/3 德国机场突陷电脑系统故障风暴
  • Python应用——将Matplotlib图形嵌入Tkinter窗口
  • 连接Milvus
  • 1.2.1 归并排序
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之13 方案再探之4:特定于领域的模板 之 div模型(完整版)
  • 三子棋游戏
  • web漏洞之文件包含漏洞
  • 模型训练二三事:参数个数、小批量、学习率衰减、输入形状
  • SCAU期末笔记 - 数据库系统概念往年试卷解析
  • MyBatis执行一条sql语句的流程(源码解析)
  • 域上的多项式环,整除,相通,互质
  • 【精读电影】至暗时刻
  • unity-入门查漏补缺0.2.02.07
  • RocketMQ场景使用
  • window11 wsl mysql8 错误分析:1698 - Access denied for user ‘root‘@‘kong.mshome.net‘
  • RocketMQ使用场景问题
  • Eplan 项目结构(高层代号、安装地点、位置代号)
  • MySQL Binlog 监听方案
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
  • 保姆级教程Docker部署ClickHouse镜像
  • 2025/1/1 路由期末复习作业二
  • Golang 入门基础知识
  • 【前序、中序、后序遍历递归栈的实现】