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

算法分析与设计复习笔记

插入排序

1. void insert_sort(int A[ ],int n)

2. {  

3.     int  a,i,j;                                    

4.     for (i=1;i<n;i++) {

5.         a = A[ i ];

6.         j = i – 1;

7.         while (j>=0 && A[j]>a) {

8.             A[ j+1 ] = A[ j ];

9.             j- -;

10.         }

11.         A[ j+1 ] = a;

12.     }

13. }

合并两个有序的子数组

1. void merge(int A[ ],int p,int q,int r)

2. {

3.     int  *bp = new int[r-p+1];  // 分配缓冲区,存放被排序的元素

4.     int  i,j,k;

5.     i = p;   j = q + 1;   k = 0;

6.     while (i<=q && j<=r) {      //  逐一判断两子数组的元素

7.         if (A[ i ] <=A[ j ])            // 按两种情况,把小的元素拷贝到

8.            bp[ k++ ] = A[ i++ ];    // 缓冲区*/ 

9.         else

10.          bp[ k++ ] = A[ j++ ];

11.    }

12.     if (i==q+1)                    // 按两种情况,处理其余元素

13.         for (;j<=r;j++)

14.             bp[++] = A[j];           // 把A[ j ]~A[ r ]拷贝到缓冲区

15.     else

16.         for (;i<=q;i++)

17.             bp[++] = A[i];             // 把A[i]~A[q]拷贝到缓冲区

18.     k = 0;

19.     for (i=p;i<=r;i++)        // 最后,把数组bp的内容拷贝

20.         A[i++] = bp[k++];            // 到 A[p]~A[r]

21.     delete bp;

22. }

i:开始合并时第一个序列的起始位置

s:合并前序列的大小

t:合并后序列的大小

合并排序算法

1. template <class Type>

2. void merge_sort(Type A[ ],int n)

3. {   int  i, s, t = 1;            

5.     while (t<n) {            

6.         s = t; t = 2 * s; i = 0;       

7.         while (i+t<n) {

8.             merge(A,i,i+s-1,i+t-1);  //i,i+s-1,i+t-1定义被合并的两个序列的边界。

9.             i = i + t;                               

10.         }

11.         if (i+s<n)

12.             merge(A,i,i+s-1,n-1);

13.     }

14. }

  1. 汉诺塔(Hanoi)问题:

void Hanoi (char a, char b, char c, int n)

{

        if ( n ==1 ) printf (“%c->%c”, a, b);

        else{

             Hanoi( a, c, b, n-1);

             printf( “%c->%c”,  a, b);

             Hanoi(c, b, a, n-1);

         }

}

    阶乘函数可归纳定义为:

    算法 计算阶乘函数 n!

    1. int factorial(int n)

    2. {

    3.     if (n==0)

    4.         return 1;

    5.     else

    6.         return n * factorial(n-1);

    7. }

整数划分问题

用一系列正整数之和的表达式来表示一个正整数,称为整数的划分。

     例:7 可划分为:

       7

       6 + 1

       5 + 2,5 + 1 + 1

       4 + 3,4 + 2 + 1,4 + 1 + 1 + 1

       3 + 3 + 1,3 + 2 + 2,  3 + 2 + 1 + 1,3 + 1 + 1 + 1 + 1

       2 + 2 + 2 + 1,2 + 2 + 1 + 1 + 1,2 + 1 + 1 + 1+ 1 + 1

       1 + 1 + 1+ 1 + 1 + 1 + 1

      上述任何一个表达式都称为整数 7 的一个划分。

2)正整数 n 的不同的划分个数称为正整数 n 的划分数,记为 p(n );

3)求正整数 n 的划分数称为整数划分问题。

1)定义两个函数:

      r(n,m):正整数 n 的划分中加数含 m 而不含大于 m 的所有划分数;

      q(n,m):正整数 n 的划分中加数小于或等于 m 的所有划分数。

      例:在 7 的划分中:

           含 6 而不含大于 6 的划分有:

                 6 + 1,因此,r(7,6)=1;

            含 5 而不含大于 5 的划分有:

                 5 + 2,5 + 1 + 1,因此,r(7,5)=2;

            含 4 而不含大于 4 的划分有:

                 4 + 3,4 + 2 + 1,4 + 1 + 1 + 1,因此,r(7,4)=3;

            含 3 而不含大于 3 的划分有:

                3 + 3 + 1,3 + 2 + 2,  3 + 2 + 1 + 1,3 + 1 + 1 + 1 + 1

             因此,r(7,3)=4

4)递归式:

    ⑴ 由式 (4.1.1) 和式 (4.1.2) 可得下面递归关系:

    ⑵ 对所有的正整数  n,                     有:

    ⑶ n 的划分不可能包含大于 n 的加数

 

    ⑷ 整数 1 只有一个划分,而不管 m 有多大

    ⑸

分治策略

将要求解的较大规模问题分割成若干个更小规模的子问题;

对这些子问题分别求解,如果子问题的规模仍不够小,则再划分为更小的子问题,如此递归的进行下去,直到问题规模足够小、很容易求出其解为止。

将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。

  • 分治法所能解决的问题一般具有以下几个特征:
    1. 该问题的规模缩小到一定的程度就可以容易地解决;
    2. 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
    3. 利用该问题分解出的子问题的解可以合并为该问题的解;
    4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

快速排序的序列的划分算法

2. int split(Type A[ ], int low, int high)

 3. {   int k, i = low;

 5.     Type x = A[low];

 6.     for (k=low+1; k<=high; k++) {

 7.         if (A[k]<=x) {

 8.             i = i + 1;

 9.             if (i!=k)   swap(A[i], A[k]);

11.         }

12.     }

13.     swap(A[low], A[i]);

14.     return i;

15. }   

快速排序:

  1. template <class Type>

  2. void quick_sort(Type A[ ], int low, int high)

  3. {

  4.     int k;

  5.     if (low < high) {

  6.         k = split(A, low, high);

  7.         quick_sort(A, low, k-1);   //对左半段排序

  8.         quick_sort(A, k+1, high); //对右半段排序

  9.     }

10. }

贪婪法:

解向量:问题中n个元素的具体取值所构成的向量;

解空间:问题中n个元素的各种不同取值组合所构成的向量全体;

约束方程:问题中的限制条件所列出的方程;

目标函数:问题求解所要达到的目标;

可行解:满足约束方程的向量;

最优解:使目标函数达极值的向量。

性质: 最优子结构性质(动态规划也有该性质)  自顶向下

斐波那契

分治法: 优化原则或最优子结构性质, 自底向上, 划分子问题

  • 分治法所能解决的问题一般具有以下几个特征:
    1. 该问题的规模缩小到一定的程度就可以容易地解决;
    2. 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;
    3. 利用该问题分解出的子问题的解可以合并为该问题的解;
    4. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

货郎担的动态规划函数

多段图动态规划函数:

资源分配问题

  1. 回溯法
    1. 回溯法是一个既带有系统性又带有跳跃性的搜索算法;
    2. 它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。——系统性

相关文章:

算法分析与设计复习笔记

插入排序 1. void insert_sort(int A[ ],int n) 2. { 3. int a,i,j; 4. for (i1;i<n;i) { 5. a A[ i ]; 6. j i – 1; 7. while (j>0 && A[j]>a) { 8. A[ j…...

vue-amap 高德地图

vue-amap是一套基于Vue 2/vue3和高德地图的地图组件 vue-amap 高德地图2.0版本的对应vue3...

Numpy基础练习

import numpy as np 1.创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1 n np.zeros(10,dtypenp.int32) n[4] 12.创建一个元素从10到49的ndarray对象 n np.arrange(10,50)3.将第2题的所有元素位置反转 n[::-1]使用np.random.random创建一个10*10的ndarray对象…...

一番赏小程序定制开发,打造全新抽赏体验平台

随着盲盒的热潮来袭&#xff0c;作为传统的潮玩方式一番赏也再次受到了大家的关注&#xff0c;市场热度不断上升&#xff01; 一番赏能够让玩家百分百中奖&#xff0c;商品种类丰富、收藏价值高&#xff0c;拥有各种IP&#xff0c;从而吸引着各个圈子的粉丝玩家&#xff0c;用…...

【前端】将vue的方法挂载到window上供全局使用,也方便跟原生js做交互

【前端】将vue的方法挂载到window上供全局使用&#xff0c;也方便跟原生js做交互 <template><div><el-button click"start">调用方法</el-button></div> </template> <script> // import { JScallbackProc } from ./JScal…...

Oracle查询优化:高效实现仅查询前10条记录的方法与实践

在 Oracle 中&#xff0c;实现仅查询前10条记录的四种方法 1. 使用 ROWNUM 查询 ROWNUM 是 Oracle 中的伪列&#xff0c;用于限制返回的行数。 SELECT * FROM table_name WHERE condition AND ROWNUM < 10;condition&#xff1a;查询条件。ROWNUM < 10&#xff1a;限制…...

go语言编译问题

go编译 goproxy地址 阿里云 https://mirrors.aliyun.com/goproxy/七牛云 https://goproxy.cn/开源版 https://goproxy.io/nexus社区 https://gonexus.dev/启用 Go Modules 功能 go env -w GO111MODULEon配置 GOPROXY 环境变量&#xff0c;以下三选一 七牛 CDN go env -w …...

mobi文件转成pdf

将 MOBI 文件转换为 PDF 格式通常涉及两个步骤&#xff1a; 解析 MOBI 文件&#xff1a;需要提取 MOBI 文件的内容&#xff08;文本、图片等&#xff09;。将提取的内容转换为 PDF&#xff1a;将 MOBI 文件的内容渲染到 PDF 格式。 可用工具 kindleunpack 或 mobi&#xff1…...

MobaXterm解决中文显示乱码问题

1 问题 打开MobaXterm时&#xff0c;会显示中文乱码。 2 解决方法 右键点击会话&#xff0c;在弹出菜单中选择“编辑会话”&#xff0c;如下&#xff1a; 选择终端字体设置&#xff0c;如下&#xff1a; 字符集换成ISO-8859-1&#xff0c;如下&#xff1a; 网上有说用…...

西门子 SINAMICS G120 变频器借助 ProfiNet 转 EtherCAT 实现与汇川 H5U 通讯实例

一&#xff0e; 案例背景 随着智能制造理念的推进&#xff0c;设备之间的协同工作变得越来越重要。例如&#xff0c;在机器人自动化焊接生产线中&#xff0c;电机驱动的焊接机器人需要与其他设备协同工作&#xff0c;这就要求负责电机控制的变频器和控制整个生产线流程的PLC能…...

流媒体之linux下离线部署FFmpeg 和 SRS

前言 用户对网络做了限制&#xff0c;只能访问指定的网址&#xff0c;和没网没啥区别&#xff0c;导致无法连接外网&#xff0c;无法获取安装包&#xff0c;还有一些编译需要的开源工具 用户需要用平台查看库房的海康摄像头实时监控&#xff0c;只能在库房里一台纯净的ubantu…...

NOBLEROYCE罗慕路斯门窗 以精工匠造开启私属人生

公元前753年罗马建立&#xff0c;其创建者为罗慕路斯。以狼孩的传奇形象成为古罗马精神象征的罗慕路斯&#xff0c;不仅是罗马的第一任国王&#xff0c;还创建了罗马最初的政治制度&#xff0c;罗马的名字也是源于这位伟大的奠基人。NOBLEROYCE罗慕路斯&#xff0c;致敬这位人类…...

【算法day8】字符串:反转

主播今天脑子不好用&#xff0c;先写两题吧~ 题目引用 反转字符串中的单词右旋字符串 1.反转字符串 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且…...

【C++进阶】第二节:多态

1、多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态。具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 2、多态的定义及实现 2.1 多态的构成条件 多态是在不同继承关系的类对象&#xff0c;去调用同一函数&a…...

梯度下降法以及 Python 实现

文章目录 1. 引言2. 梯度法3. 例子4. 代码实现5. 讨论 — 学习率 η \eta η5.1 当 η \eta η 设置过大5.2 当 η \eta η 设置过小 参考 1. 引言 梯度下降法&#xff0c;可以根据微分求出的斜率计算函数的最小值。 在人工智能中&#xff0c;经常被应用于学习算法。 2. 梯…...

Postman cURL命令导入导出

你是否曾为在Postman和终端之间切换、整理请求而抓狂&#xff1f;其实&#xff0c;Postman支持与cURL命令的无缝互通&#xff0c;通过导入导出&#xff0c;极大提升效率。用好这个功能&#xff0c;分分钟让接口测试更高效&#xff01; Postman如何快速导入cURL命令&#xff1f;…...

Java 在Json对象字符串中查找和提取特定的数据

1、在处理JSON数据时&#xff0c;需要提出个别字段的值&#xff0c;通过正则表达式提取特定的数据 public static void main(String[] args) {//定义多个JSON对象字符串类型&#xff0c;假设每个对象有a,b,c 字段String strJson "{\"a\":1.23,\"b\"…...

synchronized的特性

1.互斥 对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。 就比如synchronized修饰代码块时&#xff0c;一个线程进入该代码块就会进行“加锁”。 退出代码块时会进行“解锁”。 当其他线程想要访问被加锁的代码块时&#xff0c;就会阻塞等待。 阻塞等待…...

领域泛化与领域自适应

领域泛化&#xff08;Domain Generalization&#xff09;和领域适应&#xff08;Domain Adaptation&#xff09;是机器学习领域中处理不同数据分布场景下模型训练与应用的两种策略&#xff0c;领域泛化在泛化到目标领域时不需要进行调整&#xff0c;而领域自适应在适应到目标领…...

使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数

使用aspx&#xff0c;完成一个转发http的post请求功能的api接口&#xff0c;url中增加目标地址参数&#xff0c;传递自定义header参数 首先&#xff0c;简单实现一下&#xff0c;如何在ASPX页面中实现这个功能实现代码说明&#xff1a;注意事项&#xff1a; 然后进阶&#xff0…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...