分治策略的实现

目录

前言

 分治策略的应用

最大子数组问题

矩阵乘法问题

求解递归式的三种方法

代入法求递归式

用递归树求递归式

主方法求递归式


前言

分治三个步骤:

分解:分解原问题为子问题,这些子问题为原问题的较小规模的问题。

解决:递归地解决这些子问题,如果规模小到一定程度,则直接得出答案。

合并:合并上述解决地子问题地解,得出最终解。

递归情况:当子问题规模比较大时,成为递归情况;

基本情况:当子问题规模不需要递归,已经触底时,此时称作基本情况。

递归式:刻画算法的运行时间的等式或者不等式,如归并排序中的最坏情况下的时间复杂

 分治策略的应用

最大子数组问题

最大子数组:一个数组中的非空连续的数组元素和最大的集合成为最大子数组。

a[4] = {-1,-2,3,4};

数组a的子数组有{-1},{-2},{3},{4},{-1,-2},{-2,3},{3,4},{-1,-2,3},

{-2,3,4},{-1,-2,3,4}.

其中{3,4}子数组的和为7,是这些数组中和最大的子数组。

代码:

#include "stdio.h"
#define MAXSIZE 100
#define MINNUM -10000
int *find_cross_max_subarray(int A[MAXSIZE], int low, int mid, int high);
int *find_maxium_subarray(int a[MAXSIZE], int low, int high);
int *max(int *x, int *y, int *z);
int result[3] = {0};void main() {int A[6] = {-1,3,-2,5,-4, 6};find_maxium_subarray(A, 0, 5);printf("%d, %d, %d", result[0], result[1], result[2]);
}int *find_cross_max_subarray(int A[MAXSIZE], int low, int mid, int high) {int sum = 0;int max_sum = 0;result[0] = MINNUM;for (int i = mid + 1; i <= high; i++){sum = sum + A[i];if(result[0] < sum) {result[0] = sum;result[2] = i;}}max_sum = result[0];result[0] = MINNUM;sum = 0;for (int i = mid; i >= 0; i--){sum = sum + A[i];if(result[0] < sum) {result[0] = sum;result[1] = i;}}result[0] = max_sum + result[0];return result;
}int *find_maxium_subarray(int a[MAXSIZE], int low, int high) {if(low == high) {result[0] = a[low];result[1] = low;result[2] = high;return result;}int mid = (low+high)/2;//int right_res[3] = {0};//int left_res[3] = {0};int *left_res = find_maxium_subarray(a, low, mid);int *right_res = find_maxium_subarray(a, mid+1, high);int *cross_res = find_cross_max_subarray(a, low, mid, high);return max(left_res, right_res, cross_res);}int *max(int *x, int *y, int *z) {int *max = x;if(x[0] > y[0]) {max = x;} else{max = y;}if (z[0] > max[0]) {max = z;}return max;
}

 输出结果:

时间复杂度:O(n*lgn); 

矩阵乘法问题

前提:由于矩阵需要能够被分解成4个子矩阵运算,所以Strassen算法的前提条件式矩阵的长和宽n是2的幂函数。

代码:

#include "stdio.h"
#define MAXSIZE 4void multiply_matrix(int a[MAXSIZE][MAXSIZE], int b[MAXSIZE][MAXSIZE], int c[MAXSIZE][MAXSIZE], int n, int i, int j);
int n = MAXSIZE;
void main() {int a[MAXSIZE][MAXSIZE] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};int b[MAXSIZE][MAXSIZE] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};int c[MAXSIZE][MAXSIZE] = {0};multiply_matrix(a, b, c, n, 0, 0);
}void multiply_matrix(int a[MAXSIZE][MAXSIZE], int b[MAXSIZE][MAXSIZE], int c[MAXSIZE][MAXSIZE], int n, int i, int j) {int length = n/2;if(n == 1) {c[i][j] = a[i][j]*b[i][j];} else {multiply_matrix(a, b, c, length, i, j);multiply_matrix(a, b, c, length, i, j + length);multiply_matrix(a, b, c, length, i + length, j);multiply_matrix(a, b, c, length, i + length, j + length);}}

求解递归式的三种方法

代入法:猜测一个边界,用数学归纳法证明这个边界的正确性;

递归树法:将递归式转化为一棵树,其结点表示不同层次的递归调用产生的代价,然后采用边界和技术求解递归式。

主方法:可求解如下递归式的界:

 递归式的技术细节:

代入法求递归式

  1. 猜测解的形式;
  2. 使用数学归纳法证明解中常数,并证明解是正确的。

用递归树求递归式

猜测解的形式有时候会比较棘手,所以可以通过递归树的方法来需求解的形式。

主方法求递归式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈SpringBoot日志文件

文章目录 一、日志的作用二、如何在SpringBoot中使用日志2.1、在程序中得到日志对象。2.2、通过日志对象中提供的内置方法操打印日志信息2.2.1 日志级别2.2.1.1、日志级别有什么作用&#xff1f;&#xff1f;2.2.1.2、日志级别的分类2.2.1.2、在配置文件中设置日志级别[!] 三、…

对话机器人 Rasa 基本调试过程

以下记录rasa基本的配置&#xff0c;以及调试过程。首先用rasa init 生成一个初始的文件目录。 1、最简单的中文配置 打开项目根目录下的 config.yml 配置文件&#xff0c;修改如下&#xff1a; recipe: default.v1language: zhpipeline:- name: JiebaTokenizer- name: Lang…

Linux线程:线程分离

目录 一、什么是线程分离 1.1pthread_detach 1.2pthread线程库存在的意义 1.3__thread线程的局部存储 1.4系统调用clone 一、什么是线程分离 1.1pthread_detach 默认情况下&#xff0c;新创建的线程是joinable的&#xff0c;线程退出后&#xff0c;需要对其进行pthread_joi…

Windows Server 2019 DataCenter 配置 IIS Web Server (for Vue)

IIS 并非是最终会采用的web server&#xff0c;这里只是做个测试&#xff0c;最终会用C或者是rust自己写web server. 制作pfx证书 用openssl为IIS制作pfx格式的SSL证书&#xff1a; # openssl pkcs12 -inkey privkey.pem -in fullchain.pem -export -out idealand.xyz.pfx 用w…

java中创建对象的四种方式

1.new出一个对象 String s new String(“abc”); 2.利用反射创建对象 利用反射的两种方式&#xff1a; 使用Class对象的newInstance&#xff08;&#xff09;方法来创建Class对象对应类的实例。但是这种方法要求Class对象的对应类有默认构造器&#xff0c;而执行newInstan…

非对称密钥:应用场景

public class EncryptionAndSignatureExample { public static void main(String[] args) throws Exception {// 生成公私钥对KeyPairGenerator keyPairGenerator KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(1024);KeyPair keyPair keyPai…

路由策略实验2

对R7&#xff0c;重发布直连路由 对R2&#xff0c;做双向 对R3同样 先不改优先级 查看&#xff0c;知道所有给R3的路由为151&#xff0c;全部为OSPF。 知道了是错误的&#xff0c;先把3&#xff0c;4之间的线路断掉 接着对R3&#xff0c;让优先级全部回到100&#xff08;displa…

node-sass和sass-loader安装Error经验

一、问题 当前笔记本环境版本&#xff1a;node-v16.15.1&#xff1b;npm-8.11.0&#xff0c;在面对五年前vue项目的依赖sass-loader8.0.2&#xff0c;node-sass4.14.1的情况下&#xff0c;怎么参考大神们的安装教程&#xff0c;始终存在Error&#xff0c;经过坚持不懈的努力&a…

微软云计算之云计算平台、云操作系统Windows Azure

微软云计算平台 微软云计算平台微软的云计算技术Windows Azure组成 微软云操作系统Windows AzureWindows Azure概述Windows Azure计算服务Windows Azure存储服务全局命名空间体系架构存储域的层次结构双复制引擎文件流层分区层 Windows Azure ConnectWindows Azure CDNFabric控…

十_信号11 - 函数sigsetjmp() 和 siglongjmp()

也就是说&#xff0c;正常情况下&#xff0c;当捕捉到一个信号&#xff0c;并调用该信号的信号处理程序时&#xff0c;被捕捉的信号会被加入到当前进程的信号屏蔽字中&#xff0c;以防止在本次信号处理程序还没有完成的时候&#xff0c;再次触发该信号&#xff0c; 发生重入。 …

LLaMA-Factory实战推理

LLaMA-Factory官网&#xff1a;https://github.com/hiyouga/LLaMA-Factory 安装环境 git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory/ conda create -n py310 python3.10 conda activate py310按照llama-factory要求的标准格式组织数据集&#xff…

网络原理——http/https ---http(2)

http(接上一篇文章) 认识请求报头"header" header里面的键值对,都是标准规定的内容,很多,我们主要是认识一些关键的 host 表示对应的服务器主机的IP / 域名 实际上,这两个通常来说是一样的 但是有些时候不一样 当我们通过代码构造http请求,url里面写的以Ip地址的…

6月2(信息差)

&#x1f30d;特斯拉&#xff1a;Model3高性能版预计6月中旬开启首批交付 &#x1f384;微软对开源字体 Cascadia Code 进行重大更新 ✨天猫618加码引爆消费热潮 截至晚9点185个品牌成交破亿 1.瑞士清洁科技公司Librec开发废旧锂离子电池回收技术&#xff0c;可回收电池90%的…

Maven全局排除依赖用法

问题 项目中有很多依赖&#xff0c;某些Jar之间是有冲突的&#xff0c;有些冲突只有在运行时才会报出错误&#xff0c;这样就很危险。比如我使用如下方式去排除依赖。 <dependency><groupId>xxx</groupId><artifactId>xxx-web-common</artifactId…

Python函数式编程进阶:装饰器和闭包介绍

文章目录 Python函数式编程进阶&#xff1a;函数装饰器和闭包介绍一个简单的装饰器实现和行为表现装饰器通常会把函数替换成另一个函数Python导入模块时首先就会运行装饰器闭包__closure__属性可以查看闭包的自由变量总结 nonlocal声明 Python函数式编程进阶&#xff1a;函数装…

贴片和直插型IRM红外遥控接收头引脚定义和规格参数及使用注意事项

红外遥控接收头使用注意事项 引脚定义存在不同 红外遥控接收头大量使用在家用电器的遥控中&#xff0c;属于价廉物美的一种光电接收器件&#xff0c;批量价格约0.3元左右。 多数遥控接收头的引脚定义是OUT,GND,VCC&#xff0c;另有引脚定义不同为OUT,VCC,GND&#xff0c;记住…

Django 创建项目及应用

1&#xff0c;安装 Django pip install Django3.1.5 2&#xff0c;创建 Django项目 django-admin startproject myshop 3&#xff0c;创建 Django应用 python manage.py startapp app1 4&#xff0c;启动 Django项目 python .\manage.py runserver 到这里项目及应用创建…

Delphi主窗体实现透明

设置以下属性即可实现透明窗体显示文字&#xff1a; 设置窗体属性&#xff1a; BorderStyle 属性设置为 bsNone Color 属性设置为 clWhite&#xff08;白色&#xff1a;窗体背景色&#xff09; TransparentColor 属…

空间转录组基础数据解读+学习方法

详情请参考这个视频&#xff1a;空间转录组&#xff08;spatial transcriptome&#xff09;数据分析基础教程_哔哩哔哩_bilibili 1.首先是filtered_feature_bc_matrix文件 两个里面的内容本质一样&#xff0c;都是空间转录组 表达矩阵的信息 2.具体的所有东西可以在10x的网站…

React(五)UseEffect、UseRef

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期&#xff0c;但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时&#xff0c;网络请求&#xff0c;订阅等操作都是在生命周期中完成 import React, { Co…