初入算法(1)—— 进入算法世界

简介: 了解算法,学习算法,应用算法

一.什么是算法

1.在书中所讲到


   瑞士著名的科学家Niklaus Wirth教授曾提出:数据结构+算法=程序。

   数据结构是程序的骨架,算法是程序的灵魂。

   在生活中,算法无处不在。每天早上起来,刷牙、洗脸、吃早餐,都在算着时间,以免上班或上课迟到;去超市购物,在资金有限的情况下,考虑先买什么、后买什么,算算是否超额;在家中做饭,用什么食材、调料,具体的烹饪方法和步骤如何,做完了还要品尝一下咸淡,看看是否做熟。所以,不要说你不懂算法,其实你每天都在用!


2.我个人认为


算法就是通过一些指令,用系统的方法描述解决问题的策略机制。通俗讲就是用于计算的方法,通过该这种方法可以达到预期的结果。

二.算法的复杂性


1.相对于算法来说,他并不会特别的简单,他有复杂,有简单。


   算法复杂性的度量主要是针对运行该算法所需要的计算机资源的多少。当算法所需要的资源越多,该算法的复杂性越高;反之,当算法所需要的资源越少,算法的复杂性越低。对于任意给定的一个问题,设计出复杂性尽可能低的算法是在设计算法时追求的重要目标之一;而当给定的问题存在多种算法时,选择其中复杂性最低的算法是选用算法时遵循的重要准则。因此,算法的复杂性分析对算法的设计或选用具有重要的指导意义和实用价值。


2.算法是对特定问题求解步骤的一种描述



   算法只是对问题求解方法的一种描述,它不依赖于任何一种语言,既可以用自然语言、程序设计语言(C、C++、Java、Python等)描述,也可以用流程图、框图来表示。通常情况下,为了更清楚地说明算法的本质,我们会去除计算机语言的语法规则和细节,采用“伪代码”来描述算法。“伪代码”介于自然语言和程序设计语言之间,它更符合人们的表达方式,容易理解,但它不是严格的程序设计语言。如果要上机调试,则需要转换成标准的计算机程序设计语言才能运行。

三,算法的五个特征


一个典型的算法一般都可以抽象出5个特征:


有穷性:算法的指令或者步骤的执行次数和时间都是有限的。(有限的)


确切性:算法的指令或步骤都有明确的定义。(明确的)


输入:有相应的输入条件来刻画运算对象的初始情况。


输出:一个算应有明确的结果输出。


可行性:算法的执行步骤必须是可行的。(可执行性)

四.“好”算法的标准如下


    正确性:正确性是指算法能够满足具体问题的需求,程序运行正常,无语法错误,能够通过典型的软件测试,达到预期。

   易读性:算法遵循标识符命名规则,简洁易懂,注释语句恰当适量,方便自己和他人阅读,便于后期调试和修改。

   健壮性:算法对非法数据及操作有较好的反应和处理。例如,在学生信息管理系统中登记学生年龄时,若将21岁误输入为210岁,则系统应该有错误提示。

   高效性:高效性是指算法运行效率高,即算法运行所消耗的时间短。

   低存储性:低存储性是指算法所需的存储空间小。对于像手机、平板电脑这样的嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小被称为空间复杂度。


五.时间复杂性

1.什么是时间复杂性


简单来说就是算法运行需要时间


一般情况下,对于一个算法的复杂性分析主要是对算法效率的分析,包括衡量其运行速度的时间效率及衡量其运行时所需要占用空间大小的空间效率。


   对于算法的时间效率的计算,通常是抛开与计算机硬件、软件有关的因素,仅考虑实现该算法的高级语言程序。一般而言,对程序执行的时间复杂度的分析是分块进行的,先分析程序中的语句,再分析各程序段,最后分析整个程序的执行复杂度。通常以渐进式的大O(希腊字母Omicron,奥米克戎)形式来表示算法的时间复杂度。渐进式的大O形式表示时间复杂度的主要运算规则有如下2种


例子

2.渐近上界


   T(n)和Cf(n)的函数曲线如图1-1所示。从图1-1可以看出,当n大于等于n0时,T(n)sCf(n);当n足够大时,T(n)和f(n)近似相等。因此,我们用O(f(n))表示时间复杂度渐近上界,可以用这种表示法衡量算法的时间复杂度。算法1-3的时间复杂度渐近上界为O(f(n))=O(n2),用极限可以表示为

图片.png

3.渐近下界


   渐近下界符号Ω(T(n)≥Cf(n)),如图1-2所示。从图1-2可以看出,当n大于等于n0时,T(n)大于等于Cf(n));当n足够大时,T(n)和f(n)近似相等。因此,我们用(Ω(f(n))来表示时间复杂度渐近下界。


图片.png

在实际应用中,通常使用时间复杂度渐近上界O(f(n))来表示时间复杂度。


有些算法,如排序、查找、插入算法等,可以分为最好、最坏和平均情况分别求算法渐近复杂度。但考查一个算法时通常考查最坏的情况,而不是考查最好的情况,最坏情况对衡量算法的好坏具有实际意义。

六.空间复杂性

1.什么是空间复杂性


算法占用空间的大小


一般情况下,一个算法所占用的存储空间包括算法自身、算法的输入、算法的输出及实现算法的在程序运行时所占用空间的总和。

2.算法占用的存储空间包括


   输入/输出数据

   算法本身

   额外需要的辅助空间


   输入/输出数据占用的空间是必需的,算法本身占用的空间可以通过精简算法来缩减,但缩减的量是很小的,可以忽略不计。算法在运行时所使用的辅助变量占用的空间(即辅助空间)才是衡量算法空间复杂度的关键因素。


本篇文章就先讲解这些,我后续将会持续更新算法文章。


创作不易,求关注,点赞,收藏,谢谢~

目录
相关文章
|
机器学习/深度学习 算法 程序员
初入算法(2)—— 进入算法世界
本章将会继续在初入算法(1)——进入算法世界 的基础上继续通过趣学算法进行算法的学习。
200 1
初入算法(2)—— 进入算法世界
|
28天前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
28天前
|
机器学习/深度学习 算法 安全
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
|
1月前
|
算法
离散粒子群算法(DPSO)的原理与MATLAB实现
离散粒子群算法(DPSO)的原理与MATLAB实现
75 0
|
23天前
|
机器学习/深度学习 算法 新能源
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab粒子群算法求解水火电经济调度优化问题研究(Matlab代码实现)
|
25天前
|
算法 机器人 定位技术
基于机器视觉和Dijkstra算法的平面建筑群地图路线规划matlab仿真
本程序基于机器视觉与Dijkstra算法,实现平面建筑群地图的路径规划。通过MATLAB 2022A读取地图图像,识别障碍物并进行路径搜索,支持鼠标选择起点与终点,最终显示最优路径及长度,适用于智能导航与机器人路径规划场景。
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的XGBoost时间序列预测算法matlab仿真
本程序基于Matlab 2024b实现,结合粒子群优化(PSO)与XGBoost算法,用于时间序列预测。通过PSO优化XGBoost超参数,提升预测精度。程序包含完整注释与操作视频,运行后生成预测效果图及性能评估指标RMSE。
|
23天前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
104 3
|
23天前
|
存储 算法 安全
【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)
【无人机】基于灰狼优化算法的无人机路径规划问题研究(Matlab代码实现)
122 0
|
23天前
|
机器学习/深度学习 传感器 数据采集
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)
【23年新算法】基于鱼鹰算法OOA-Transformer-BiLSTM多特征分类预测附Matlab代码 (多输入单输出)(Matlab代码实现)
115 0

热门文章

最新文章