algorithm - 确定分治算法的适当递归函数
问题描述
很长一段时间以来,我一直试图了解复发的本质。我特别好奇如何产生用于递归的函数 (T(n))。例如在归并排序中,时间复杂度可以说是 T(n) = 2T(n/2) + cn。我看不到这与合并排序中的递归调用之间的联系。
我理解大师理论的概念。a 应该是递归调用的数量,b 应该是每次调用中输入缩小的因子,d 是在递归算法之外完成的工作。我只是不明白合并排序中的任何工作是如何在递归算法之外完成的,因为算法完成的所有工作都是由递归调用中的一个以某种方式产生的。
slice1 = Arrays.copyOfRange(u_arr, 0, half); // this takes O(n) time, better method?
slice2 = Arrays.copyOfRange(u_arr, half, u_arr.length);
arr1 = this.mergesort(slice1);
arr2 = this.mergesort(slice2);
return this.merge(arr1, arr2);
}
排除基本情况、一些初始化和合并函数,该算法完成的任何工作如何在递归调用之外完成?并且鉴于可以确定递归调用之外的运行时间,那么递归本质上是否只是一个模板函数,用于插入分治算法的特征,例如 T(n/b) + O(n^d)?给定适当的 a、b 和 d。
解决方案
推荐阅读
- keycloak - 查看发送给客户端的属性列表
- c++ - VS Code - 一个项目中只有一个 cpp 文件可以编译
- python - Python - 为 django 项目重新激活我的 virtualenv
- c++ - 通用记录器与异常模式
- spring-boot - Spring Boot中日志级别旁边的整数
- react-native - 强制退出后反应本机博览会应用程序崩溃
- yii - Yii2:当两者在同一个域中时,如何从后端链接到前端?
- encoding - 读取 SAS 表,显示值。编码
- matlab - 基于优化的线拟合
- amazon-web-services - 为什么 AWS CLI rds describe-db-snapshots 不包含 Aurora 快照?