关于算法设计与分析学习报告
关于算法设计与分析学习报告
- 关于算法设计与分析学习报告
- 学习前概述
- 第1章 概论
- 第2 章 递归算法设计技术
- 第3章 分治法
- 第4章 蛮力法
- 第5章 回溯法
- 第6章 分枝限界法
- 第7章 贪心法
- 第8章 动态规划
- 第9章 图算法设计
- 第10章 计算几何
- 第11章 计算复杂性理论简介
- 第12章 概率算法和近似算法
关于算法设计与分析学习报告
…………………………………………………………
学习前概述
应学校的教导委员决定,算法设计与分析由学生自学完成本课程的知识,让我们拥有更加强的自学的能力与社会生存技能。本课程经过本人一个多月的刻苦学习,在学习中不断总结课本知识,在学习中克服难题,并进行了总结在此篇报告中进行总结我的学习情况。
本教材总由12章。我的学习计划是学前思考,认真学习与学后总结三大部分组成。
第1章 概论
概论:介绍算法的概念、算法分析方法和STL在算法设计中的应用。
算法概念,算法是求解问题的一系列计算步骤,用来将输入数据转换成输出结果。算法设计应满足以下几个目标,正确性、可使用性、可读性、健壮性、高效率与低存储量需求。算法具有以下5个重要特性:有限性、确定性、可行性、输入性、输出性。应用型参数名前需加上&,表示这样的形参在执行后会将结果回传给对应的实参。
算法分析,两种权衡算法效率的方法:事后统计法和事前分析估算法。算法的时间复杂度分析,算法的执行是时间主要与问题规模有关。渐进符号有以下几个特性:传递性、自反性、对称性、算术运算;算法的最好、最坏和平均情况、非递归算法的时间复杂度分析;递归算法的时间复杂度分析。算法空间复杂度分析
算法设计工具——STL。STL是一个功能强大的基于模板的容器库,通过直接使用这些现成的标准化组件可以大大提高算法设计的效率和可靠性。STL主要有container(容器)、algorithm(算法)、和iterator(迭代器)三大部分构成,容器用于存放数据对象,算法用于操作容器中的数据对象。STL容器就是一种数据结构如链表、栈和队列。STL是用来操作容器中数据的模板函数。STL迭代器用于访问容器中的数据对象。常用的STL容器大致分为顺序容器、适配器容器、和关联容器3种类型
第2 章 递归算法设计技术
- 递归算法设计技术:介绍递归的概念、递归诉法设计方法和相关示例递归算法到非递归算法的转化以及递推式的计算
- 递归的定义,递归是指在函数的定义中又调用函数本身的方法,递归一般来说,能够用递归解决的问题应该满足以下3个条件:
(1) 需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量规模上不同。
(2) 递归调用的次数必须是有限的。
(3) 必须有结束递归的条件来终止递归。 - 递归算法设计,递归模型基本步骤如下:
(1) 对原问题f(x0)进行分析,抽象出合理的“小问题”f(sn-1)
(2) 假设f(xn-1)是可解的,在此基础上确定f(sn)的解,即给出f(sn)与f(sn-1)之间的关系
(3) 确定一个特定情况(如f(x)或f(x))的解,由此作为递归出口
递归算法设计示例有简单选择排序和冒泡排序和求解n皇后问题
第3章 分治法
- 分治法:介绍防治法的策略和求解过程,讨论采用分治法求解排序问题、查找问题、最大连接子序列和问题、大整数乘法问题及矩阵乘法问题的典型算法,并简要介绍了并行算法的概念。
- 分治法的特征:
(1) 该问题的规模缩小到一定的程度就可以容易地解决。
(2) 该问题可以分解为若干个规模较小的相似问题。
(3) 利用该问题分解出的子问题的解可以合并为该问题的解。
(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包括公共的子问题 - 分治法的求解过程
(1) 分解成若干个子问题
(2) 求解子问题
(3) 合并子问题 - 求解排序问题,快速排序归并排序
- 求解查找问题,查找最大和次大元素,折半查找
- 求解组合问题,求解最大连接子序列和问题,求解棋盘覆盖问题,求解循环日程 安排日程,最大整数乘法和矩阵乘法问题。
- 并行计算,并行计算法是用多台处理器联合求解问题的方法和步骤。PRAM模型,BSP模型
第4章 蛮力法
- 蛮力法:介绍蛮力法的特点、蛮力法的基本应用示例、递归在蛮力法中的应用以及图的深度优先和广度优先遍历算法。
- 蛮力法也称为穷举法或暴力法,蛮力法基本思路是对问题的所有可能转态意义测试,直到找到解或将全部可能转态都测试为止。
- 蛮力法的优点:逻辑清晰,编写程序简洁、可以用来解决广阔领域的问题、对于一些重要的问题,它可以产生一些合理的算法、可以解决一些小规模的问题、可以作为其他高效算法阿道衡量标准。
- 使用蛮力算法有以下几种情况:搜索所有的解空间、搜索所有的路径、直接计算、模拟和仿真。
- 蛮力算法的基本应用,简单选择排序和冒泡排序,字符串匹配,求最大连接子序列和问题,求解幂集问题,求解简单0/1背包问题,求解排序问题,求解任务分配问题
图的深度优先和广度优先遍历
第5章 回溯法
- 回溯法:介绍解空间概念和回溯法算法框架,讨论采用会输发求解0/1背包问题、装载问题、子集和问题、n皇后问题、图的m着色问题、任务分配问题、活动安排时间问题和流水作业调度问题的典型算法。
- 回溯法是一个类似穷举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足条件时就“回溯”(即回退),尝试其他路径。
- 算法设计的关键点有3个:
- (1)结点是如何扩展的
- (2)在解空间树中安什么方式搜索
- (3)解空间通常是十分庞大的如何高效地找到问题的解
回溯法与深度优先遍历的不同点:访问次序不同,访问次数不同,剪枝不同。
第6章 分枝限界法
- 分枝限界法:介绍分枝限界法的特点和算法框架、队列式分枝限界法和优先队列式分枝限界法,讨论采用分枝限界法求解0/1背包问题、图的单源最短路径、任务分配问题和流水作业调度问题的经典算法。
- 分枝限界法类似于回溯法,也是一种在问题的解空间树上搜索问题的解的算法,限界函数设计需根据具体问题来分析。一般先要确定问题解的特性,如果目标函数是求解最大值,则设计上限界函数ub,若s1是s2的双亲结点,则应满足ub(s1)>=ub(s2),找到一个可行解ub(s1)后将所有小于ub(s1)的结点剪枝。
- 队列式分枝限界法步骤:
-①将根结点加入活结点队列,
②从活结点队列中取出队头结点作为当前扩展结点,
③对于当前扩展结点,先从左到右产生它的所有结点,用约束条件检查,把所有满足约束条件的子结点加入活结点队列。
④重复步骤②和③,直到找到一个解惑活结点队列为空为止。还有优先队列式分枝限界发。 - 分枝限界发3个关键问题,
①如何确定合适的限界函数,
②如何组织处理的活结点表,
③如何确定解向量的各个分量。
第7章 贪心法
- 贪心法:介绍贪心法的策略、求解过程和贪心法求解问题应具有的性质,讨论采用贪心法求解活动安排问题、背包问题、最优转载问题、田忌赛马问题、多机遇问题、哈夫曼编码和流水作业调度问题的典型算法。
- 贪心法是一种典型的算法设计策略,用于求解问题的最优解。贪心法的基本思路是在对问题求解时总是做出在当前看来是最好的选择,也就是说在贪心法不从整- - 体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。
- 贪心算法的一般求解过程:
-①建立数学模型来描述问题。
-②把求解的问题分解成若干个子问题;
③对每一个子问题求解,得到子问题的局部最优解,
④把子问题的局部最优解合成原来解问题的一个解。
第8章 动态规划
- 动态规划:介绍动态规划的原理和字节步骤,讨论采用动态规划法求解整数拆分问题、最大连续子序列和问题、三角形最小路径问题、最长公共子序列问题、最长递增子序列问题、编程距离问题、0/1背包问题、安全背包问题、资源分配问题、会议安排问题和滚动数组的典型算法。
- 动态规则是将多阶段决策问题进行公式化的一种技术。动态规划是一种解决多阶段决策问题最优化方法,把多阶段过程转化成一系列单阶段问题,利用各阶段之间的关系逐个求解。
- 动态规划中的几个基本概念
①阶段和阶段变量
②状态和转态变量
③决策和策略
④转态状态方程。 - 动态规划求解的几个步骤
①最优性原理
②无后效性是
③有重叠子问题。 - 动态规划的设计有一定的模式,一般有以下步骤:
①划分阶段,
②确定状态和状态变量
③确定决策并写出状态转移方程。
④寻找边界条件。
第9章 图算法设计
- 图算法设计:讨论结构最小生成树的两种算法、求图的最短路径的4种算法,并采用5种䒦策略求解旅行商问题,最后介绍网络流的相关概念以及求最大流和最小费用最大流的算法。
- 图是一类常用的数据结构。求图的最小生成树,是一个连通图的生成树是一个极小连通子图。有普里姆算法构造最小生成树;克鲁斯卡尔算法,是一种按权值的递增次序选择合适的边来构造最小生成树的方法。狄克斯特拉算法、贝尔曼-福特- - 算法、SPFA算法、弗洛伊德算法。
网络流,在日常中有大量的网络,例如电网、交通运输网、通信网、生产管理网。 - 一个流量函数应该满足以下条件:
①容量限制
②斜对称
③流守恒
第10章 计算几何
- 计算几何:介绍计算几何汇总常用的矢量运算以及求解凸包问题、最近对问题和最远点对问题的典型算法。
- 计算几何作为计算机科学中的一个分支,主要研究解决几何问题的算法,在计算机图形学,科学计算可视化和图形用户界面有广泛应用。
- 求最近点问题,用蛮力法求最近点对的过程是分别计算每一对点之间的距离,然后找出距离最小的一对;用分治法求解最近点对;求最远点也是同理。
第11章 计算复杂性理论简介
- 计算复杂性理论简介:介绍图灵机计算模型、P类和NP类问题以及NPC问题
- 求解问题按算法的时间复杂度可分成三大类:
第一类是存在多项式算法的问题,
第二类是肯定不存在多项式算法问题,
第三类是尚未找到多项式算法,也不能证明其不存在多项式算法的问题。
第三类问题介于第一类问题和第二类问题之间。 - 图灵机模型,图灵机模型的基本结构包括一条向右无限延伸的输入带、一个有限状态控制器和连接控制器与输入带的读写头。
- P类和NP类问题,P类问题用确定性图灵机以多项式时间界可解的问题,P指确定性图灵机上的具有多项式算法的问题集合。用非确定性图灵机以多项式时间界可解的问题称为NP类问题。
- NPC问题,NPC问题的概念表明找到某个问题的有效算法至少和找NP中所有问题的有效算法那一样难。
第12章 概率算法和近似算法
- 概率算法和近似算法:介绍着两类算法的特点和基本的算法设计方法
概率算法和近似算法是两种另类算法,概率算法在算法执行中引入随机性,近似诉法采用近似方法来解决优化问题。 - 概率算法也叫随机算法,允许算法在执行过程中随机地选择下一个计算步骤。概率算法通常讨论以下两种期望时间,①平均的期望时间:所有输入实例上平均的期望执行时间。②最坏的期望时间:最坏的输入实例上的期望执行时间。概率算法大概分为以下4类:①数字概率算法②蒙特卡罗算法③拉斯维加斯算法。④舍伍德算法。
关于算法设计与分析学习报告相关推荐
- 算法设计与分析学习笔记
算法设计与分析 记录一下在学习算法设计与分析过程中的一些笔记. 参考 算法设计与分析第二版,清华大学出版社. https://www.bilibili.com/video/BV1254y1r71T?s ...
- 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...
<太原理工大学算法设计与分析实验报告>由会员分享,可在线阅读,更多相关<太原理工大学算法设计与分析实验报告(12页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: ...
- 格雷码算法c语言实验报告,算法设计与分析实验报告
本科生实验报告 课程名称:算法设计与分析 实验项目:递归和分治算法 实验地点:计算机系实验楼110 专业课:物联网1601学生.2016002105 学生姓名:于 指导员:郝晓丽 2018年5月4日 ...
- C/C++ 算法设计与分析实验报告
算法设计与分析实验报告 算法实验整体框架的构建 菜单代码块 选择函数代码块 主函数代码块 实验模块Ⅰ:算法分析基础--Fibonacci序列问题 实验解析 Fibonacci序列问题代码块 实验模块Ⅱ ...
- 南京邮电大学c语言实验报告4,南京邮电大学算法设计实验报告——动态规划法...
<南京邮电大学算法设计实验报告--动态规划法>由会员分享,可在线阅读,更多相关<南京邮电大学算法设计实验报告--动态规划法(12页珍藏版)>请在人人文库网上搜索. 1.实 验 ...
- 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...
动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...
- 编译原理实验报告_任意给定一个正规式 r (包括连接、或、闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N 。
任意给定一个正规式 r (包括连接.或.闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N . 百度网盘下载 传送门 提取码:bzjn
- 数据结构实验报告——排序算法设计及分析(排序单链表)
一.实验目的和要求 通过学习多种排序算法,体会对同一种操作多种不同的算法设计:通过比较各排序算法对于数据存储结构的要求,体会算法设计不依赖于数据存储结构,而算法实现依赖于数据存储结构:通过分析排序算法 ...
- 数据结构与算法 第二次实验报告堆栈队列
数据结构与算法 第二次实验报告 姓名:许恺 学号:2014011329 班级:计算机14-1 中国石油大学(北京)计算机科学与技术系 前 言 <数据结构>是计算机及相关 ...
最新文章
- c语言统计26个英文字母各出现个数,网上答案汇总与分析——【输入一串英文,统计各单词出现的个数】...
- nodemanager不能正常关闭_在什么情况下不能使用罗茨风机及如何正确关闭罗茨风机...
- MongoDB中如何优雅地删除大量数据
- MySQL时间戳与日期格式的相互转换
- php开发大型网站如何优化,PHP编写大型网站问题
- list删除某个元素_java list 删除元素
- mysql引擎机制_MySQL引擎特性:InnoDB同步机制
- 高等代数——大学高等代数课程创新教材(丘维声)——2.1笔记+习题
- QCC512x/302x笔记(3)-- 只改一行代码,实现串口输出调试log
- java动态时钟_Java实现动态模拟时钟
- 数据在网络中如何传输的
- 工作笔记八——vue项目的多语言/国际化插件vue-i18n详解
- npm安装 elementui 报错:404 Not Found - GET https://registry.npmjs.org/@vue%2fvue-loader-v15 - Not found
- java架构师全套图解,使用/教程/实例
- were passed to component but could not be automatically inherited because component renders fragment
- 苹果怎么换行打字_2周内将你的打字速度提高3倍的方法
- rand函数和srand函数的用法和区别
- Python中int、str、bytes相互转化,还有2进制、16进制表示,你想要的都在这里了
- 苹果开发者帐号关联大批量下架如何规避?
- 概率统计·假设检验【正态总体均值的假设检验、正态总体方差的假设检验】
热门文章
- 技术分享:逆向海盗船k95机械键盘
- 计算机f1到f12作用,不明白F1到F12键到底有什么用?大白话教你怎么用这些快捷键...
- javascript charCodeAt() 和 fromCharCode()
- java 程序性能优化 记录1(java代码优化方面)
- 7-LTE QoS: SDF and EPS Bearer QoS
- 简易人事管理系统(pyqt5+mysql)
- MySQ快速基础篇_MySQL数据库基础
- Android短视频系统源码功能测试(个人总结完整版)
- Golang 多种配置文件解析
- 程序员的春节对联集锦