算法设计与分析【期中+期末复习知识点总结】(持续更新)

第1章:算法概述

算法:具有输入、输出、确定性、有限性。

程序(算法+数据结构=程序):具有输入、输出、确定性(注意:程序可以不满足有限性,如操作系统是在无限循环中执行的程序)。

衡量算法好坏的方法:正确性(有限时间正确结果)、简明性、效率(时间、空间)、最优性

渐进意义下的符号:

O:表示算法的渐近上界,如果算法的时间复杂度为O(g(n)),使得对于任何输入规模n,算法的运行时间都不会超过c * g(n),即算法的时间复杂度不会超过g(n)的某个常数倍,此谓上界。

Ω:表示算法的渐近下界,如果算法的时间复杂度为Ω(g(n)),使得对于任何输入规模n,算法的运行时间都不会低于c * g(n),即算法的时间复杂度不会低于g(n)的某个常数倍,此谓下界。

Θ:表示算法的渐近紧确界,如果算法的时间复杂度为Θ(g(n)),使得对于任何输入规模n,算法的运行时间都被夹在c1 * g(n)和c2 * g(n)之间,即算法的时间复杂度大约是g(n)的某个常数倍,此谓同阶。

第2章:递归与分治

分治法:将规模为n的问题分解为k个规模较小的子问题,子问题间互相独立且与原问题相同。通过递归求解子问题,最后将解合并,可实现对原问题的求解。

个人总结:分治法的核心思想是:分解和递归。即将大问题分解为子问题,因为子问题性质与原问题相同,因此可以使用相同的递归式进行求解。

注意子问题间的求解必须是独立的,否则会做很多不必要的重复工作,如果子问题间不完全独立的话选择动态规划会比较好。)

分治法求解过程:分解 -> 递归求解 -> 合并。

分治算法典型问题:二分搜索、合并排序、快速排序、大数乘法、矩阵乘法、棋盘覆盖、最近点对问题、线性时间选择、循环赛日程。

排序算法时复杂度比较
排序方法最好时间平均时间最坏时间辅助空间
插入排序O(n)O(n^{2})O(n^{2})O(1)
堆排序O(nlogn)O(nlogn)O(nlogn)O(1)
冒泡排序O(n)O(n^{2})O(n^{2})O(1)
快速排序O(logn)O(nlogn)O(n^{2})O(logn)
归并排序O(nlogn)O(nlogn)O(nlogn)O(n)

分治答题策略:

第1步:简单描述所设计的算法,要重点说明是如何将问题划分为子问题(分解策略,通常是进行二分)

第2步:说明如何进行递归,给出递归方程

第3步:合并过程如果有的话就一句话带过即可

第4步:注意要在最后写上时间复杂度和空间复杂度。

计算时间复杂度方法如下:

带有T(n)=T(n/2)的时间复杂度一般是O(nlogn)

第3章:动态规划

动态规划:将规模为n的问题分解为k个规模较小的子问题,子问题间彼此关联且与原问题相同。通过将子问题的解记录下来,以避免重复计算。动态规划常用于解决具有重叠子问题最优子结构特性的问题,通常使用表格法或记忆化搜索来实现,最终得到原问题的最优解。

重叠子问题:在递归执行的过程中,同一个子问题会被多次遇到和解决,通过存储已解决子问题的答案,动态规划可以避免对相同子问题的重复计算。

最优子结构:一个问题的最优解包含其子问题的最优解。

个人总结:动态规划与贪心不同的一点在于:动态规划的子问题间不是完全独立的,换句话说子问题间具有关联或者说是依赖的关系,因此可以用表来记录已解决的子问题答案,后续操作用到时只需要查表即可,不用再重新计算,可以节约开销)

动态规划算法典型问题:最长公共子序列、最大子段和问题、凸多边形最优剖分、多边形游戏、图象压缩、电路布线、流水作业调度、0-1背包问题。

动态规划答题策略:

第1步:简单描述所设计的算法,要重点分析最优解结构(满足最优子结构),简单说明满足重叠子问题性质。

第2步:建立递归关系,给出递归方程。

第3步:计算最优值,即简单描述求解过程,给出时间复杂度,最好给出空间复杂度(表的复杂度)。

第4步:构造最优解

第4章:贪心算法

贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择来达到。

证明满足贪心选择性质:证明每一步所做出的贪心选择最终将获得问题的整体最优解。(首先考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始。在做出贪心选择后,原问题简化为规模更小的类似子问题。用数学归纳法证明,通过每一步做贪心选择,最终可得到问题的全局最优解)

最优子结构性质:一个问题的最优解包含其子问题的最优解。

贪心算法典型问题:装船问题、哈夫曼编码问题、单源最短路径问题、最小生成树问题、多机调度问题。

贪心答题策略:

第1步:先描述所设计的算法。

第2步:证明算法的正确性,包括贪心选择性质和最优子结构性质。

第3步:给出时间复杂度。

(如有谬误望请指正,持续更新中)

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (138)-- 算法导论11.4 2题

二、用go语言,试写出HASH-DELETE 的伪代码;修改 HASH-INSERT,使之能处理特殊值DELETED。 文心一言: 首先,让我们定义一个基本的哈希表数据结构。这个结构将包括一个存储键值对的哈希表和一个存储已删除键值对的队列。我们可以用…

基于SpringBoot的SSMP整合案例(在Linux中发布项目的注意事项与具体步骤步骤)

前言与注意 这几天在Linux中上线之前的小项目时,遇到了很多的问题,Linux镜像的选择,jdk, mysql在linux中的下载,使用finallshell连接linux,使用tomcat连接linux中的数据库........ 在下面的注意事项中我会将…

【好用的个人工具】搭建一款实用的个人IT工具箱——it-tools

【好用的个人工具】搭建一款实用的个人IT工具箱——it-tools 一、it-tools介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载it-tools镜像五、部署it-tools工具箱5.1 创建…

使用ChatGPT进行数据分析案例——贷款数据分析

目录 数据数据 每一行是一个记录,代表着一笔贷款,每一列是一个特征,一共1万多条数据,最后一列非常重要save_loans是否成功收回

系列四、强引用、软引用、弱引用、虚引用分别是什么?

一、整体架构 二、强引用(默认支持模式) 2.1、概述 当内存不足时,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是我们最常见的普通对象引用,只…

华为模拟器dhcp实验

实验需求,pc1 pc2 pc3 获取到地址且能ping通,pc1 pc2 为地址池模式,pc3为接口模式 上配置 #sysname AR1# dhcp enable # interface GigabitEthernet0/0/0ip address 10.0.47.254 255.255.255.0 dhcp select relaydhcp relay server-ip 10.0…

在线随机字符串生成工具

具体请前往:在线随机字符串生成器--通过该工具生成动态复杂随机密码,随机字符串等,加密盐等

C语言实现带头双向循环链表

文章目录 写在前面1. 链表节点的定义2. 链表的初始化3. 插入数据3.1 头插3.2 尾插3.3 在指定位置的前面插入数据 4 删除数据4.1 头删4.2 尾删4.3 删除指定位置的数据 5 查找并修改数据5. 链表的销毁 写在前面 上面文章用C语言实现了单链表的增删查改,我们知道&…

安顿APP3.0全新升级,引领智能穿戴健康革新,专注预警疾病风险

随着人们生活水平的提高和工作压力的增加,心脑血管疾病已经成为现代社会的严重问题,特别是心梗、脑卒中等疾病已经开始夺去年轻人的生命。 据报道,近年来,多位年轻人因心脑血管疾病突发去世,如42岁的知名男演员、30岁的…

oncoPredict文献学习

原文:oncoPredict: an R package for predicting in vivo or cancer patient drug response and biomarkers from cell line screening data oncoPredict:一种R包,用于从细胞系筛选数据中预测体内或癌症患者的药物反应和生物标志物 - PMC (n…

第十九章Java绘图

19.1Java绘图类 绘图是高级程序设计中非常重要的技术。 19.1.1Graphics类 Graphics类是所有图形上下文的抽象基类,它允许应用程序在组件以及闭屏图像上进行绘制 19.1.2Graphics2D类 使用Graphics2D类可以完成简单的图形绘制任务,但是她所实现的功能…

PC业务校验(已有该名称,已有该编码)

rules: {name: [{ required: true, message: "部门名称不能为空", trigger: "blur" },{min: 2,max: 10,message: "部门名称的长度为2-10个字符",trigger: "blur",},{trigger: "blur",validator: async (rule, value, callba…