【数据结构与算法】一文带你学透——算法概述

news2024/10/2 12:23:59

前言

   本期我们所要学习的内容是数据结构与算法中的算法的相关内容,通过上期我们学的数据结构想必大家都会了吧,在学习完毕之后算法,我想你已经可以编写出比较优秀的代码了,著名计算机科学家沃思曾提出一个公式 程序=数据结构+算法。双剑合璧,天下无敌!


 

目录

前言

目录

一、算法的概述

1.1 算法概述

1.2 什么是算法

1.2.1 算法的概念

1.2.2 算法的特性

1.2.2.1 输入和输出

1.2.2.2 有穷性

 1.2.2.3 确定性

 1.2.2.3 可行性

1.2.3 算法设计的要求

1.3 算法分析 

13.1 算法的效率

1.3.2 算法分析的方法

 1.3.2.1 事先分析估算法

 1.3.2.1 事后统计法

1.4 案例 

总结


一、算法的概述

1.1 算法概述

  著名计算机科学家沃思曾提出一个公式: 程序=数据结构+算法 。算法是数据结构
的灵魂,一个数据结构设计得再好,如果没有算法,如同失去灵魂的人,它的存
在就毫无意义。将算法与数据结构结合起来,才能对数据结构进行各种运算操作。

1.2 什么是算法

1.2.1 算法的概念

  算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且
每条指令表示一个或多个操作。

算:计算

法:方法 

计算实物的方法。

  张三打算出去作案,可以使用多种交通工具如:汽车、火车、自行车、电车、飞机、地铁。每种出行的方法可以看做一个算法。

1.2.2 算法的特性

算法具有 5 个基本特性: 输入、输出、有穷性、确定性和可行性

1.2.2.1 输入和输出

算法具有零个或多个输入。
算法至少有一个或多输出。 算法是要有输出的,没有输出,算法就没有意义。
输出的形式可以是打印输出,也可以是返回一个或多个值。

1.2.2.2 有穷性

有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且
每一个步骤在可接受的时间内完成。
  这里的有穷不是纯数学意义的,而是在实际 应用中合理的、可以接受的“ 有边界 ”。假如一个算法计算机要运行 20 年才会结束,虽然在数学意义上是有穷了,但几乎无现实意义。

 1.2.2.3 确定性

确定性指的是算法的每一步骤都具有确定的含义,不会出现歧义。

 1.2.2.3 可行性

可行性:算法的每一步都必须是可行的,即每一步都能通过执行有限次数完成。

1.2.3 算法设计的要求

  在进行算法解决问题时,不用的算法质量的优劣程度直接决定着程序运行效率,设计一个好的算法应该满足五点:正确性、可读性、健壮性、时间效率高和存储量低。

1.3 算法分析 

13.1 算法的效率

设计算法要尽量的提高效率,这里 效率高一般指的是算法的执行时间

1.3.2 算法分析的方法

 我们如何来度量一个算法的执行时间?我们可以使用两种方法来进行:事先分析估算法

事后统计法。

 1.3.2.1 事先分析估算法

事前分析估算方法 在计算机程序编写前,依据统计方法对算法进行估算。

 程序在计算机上运行时所消耗的时间取决于下列因素:

(1)算法采用的策略,方案。

(2)编译产生的代码质量(软件)。

(3)问题的输入规模。

(4)机器执行指令的速度(硬件)。

  抛开计算机软件、以及计算机硬件的因素,一个程序的运行时间依赖于算法的好坏和问题的输入规模。例如:求10的阶乘和求1000的阶乘计算的数据规模是不同的。

 1.3.2.1 事后统计法

 事后统计法: 这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编
制的程序的运行时间进行比较,从而确定算法效率的高低。

事后统计法存在很大的缺陷:

(1)必须依据算法事先编制好测试程序,通常需要花费大量时间和精力。 

(2)不同测试环境差别不是一般的大!

(3)算法的此时数据设计困难,并且程序的运行时间还与测试数据的规模有关。

1.4 案例 

  张三今天闲得无聊,就回想起自己上小学的时候,老师给同学们出了个问题,从1+2+3+...100等于多少呀?张三为了得到同学们的夸赞,差点把手指头掰断才算出这个题目,现在我们可以使用自己学到过的C语言的知识对这个题目进行编程!

#include <stdio.h>
int main(){
	int i,sum=0;
	for(i=1;i<101;i++){
		sum+=i;
	}
	printf("sum=%d",sum);
} 

   我们可以对主要执行的代码进行分析,从int 开始算程序执行了1次,循环里边的sum执行100次,printf执行了1次,可以估算大约执行了 102次。

#include <stdio.h>
int main(){
	int i,sum=0;
	sum=(1+100)*100/2;
	printf("sum=%d",sum);
} 

   然而当我们学习了等差数列求和公式之后,我们就可以使用三条语句求出该问题。 

总结

  本期就到此结束了,本期主要的学习目标就是记住算法的相关概念(在应试考试中一定会考的),下期我们主要学习的是如何分析代码的运行效率,以及对算法复杂度的定义。我们下期再见!


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

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

相关文章

18.备忘录模式(Memento)

意图&#xff1a;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;这样就可以在以后将该对象恢复到原先保存的状态。 上下文&#xff1a;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要求…

Python的电机控制模拟程序

一个带有EPICS支持的虚拟电机控制器。 1&#xff09;Status类&#xff1a;其实例化对象代表一个电机轴的状态。 #!/usr/bin/env python Status类代表一个电机处于的状态&#xff1a;1、DIRECTION状态位&#xff1a;设置运动方向2、DONE_MOVING状态字&#xff1a;置位表示结束…

数据结构与算法的力量:编写更高效的代码

文章目录 为什么数据结构和算法重要&#xff1f;1. 提高性能2. 节省资源3. 解决复杂问题4. 改进代码质量 常见数据结构和算法数据结构1. 数组&#xff08;Array&#xff09;2. 链表&#xff08;Linked List&#xff09;3. 栈&#xff08;Stack&#xff09;4. 队列&#xff08;Q…

哈希(hash)——【C++实现】

本章gitee代码仓库&#xff1a;Hash 文章目录 &#x1f490;1. 哈希概念&#x1f33b;2. 哈希冲突&#x1f33c;3. 哈希函数&#x1f338;3.1 哈希函数设计原则&#x1f338;3.2 常见哈希函数 &#x1fab4;4. 哈希冲突解决方案&#x1f331;4.1 闭散列——开放定址法&#x1f…

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求&#xff0c;需要下载图片到本地&#xff0c;我的三个测试机&#xff08;荣耀Android10&#xff0c;红米 11 和小米Android 13都没有问题&#xff09;。 然后&#xff0c;主角登场了&#xff0c;测试的三星Android 13 死活拉不起存储权限弹窗。 …

使用setInterval定时器实现文字一个一个的打印在页面中

前言&#xff1a; 项目需求实现请求回来的数据一个一个的打印在页面中&#xff0c;点击“停止生成”暂停打印&#xff1b;该功能需求类似于文心一言。 代码实现&#xff1a; view页面代码&#xff1a; script代码&#xff1a; 核心代码&#xff1a; let k 0; timer setInte…

【python】lightgbm 无法打开文件

问题&#xff1a;文件无法打开 在使用 lightgbm 读取模型文件时不能打开 报错&#xff1a; Traceback (most recent call last):File "detect_interpretability_.py", line 176, in <module>lightgbm_test(White_data, os.path.basename(data_path), model_f…

得帆信息联合创始人——王周健:大中型企业集成平台选型建议

在当今这个数字化时代&#xff0c;大中型企业面临着前所未有的挑战&#xff0c;企业需要快速响应外部市场变化&#xff0c;以保持竞争力。在这个过程中&#xff0c;企业需要快速、准确的决策力&#xff0c;需要大量有价值的数据作为支撑。所以跨企业、跨部门、跨系统的业务联通…

C语言字符函数和字符串函数(1)

大家好&#xff0c;我们又见面了&#xff0c;让大家久等了&#xff0c;我们今天就来学习字符函数和字符串函数。 在开启今天的学习之前呢&#xff0c;我来解决一下一些小伙伴平时找不到库函数使用的烦恼&#xff0c;因为我们cplusplus.com最新版本不能够查询函数&#xff0c;我…

C盘扩容(微PE工具箱)

C盘扩容&#xff08;微PE工具箱&#xff09; 1、关闭Bitlocker2、安装微PE3、以D盘分10G给C盘为例3.1安装后重启会出现两个选项电脑系统和PE系统&#xff0c;选择PE系统3.2调成分区空间3.3检查分盘情况并删除PE系统 1、关闭Bitlocker 2、安装微PE https://www.wepe.com.cn/dow…

2023年招标行业研究报告

第一章 行业概况 1.1 招标定义和分类 招标行业涉及政府、企事业单位通过公开、公平、公正的手段组织采购、工程建设等项目的过程。尽管中国的招标行业发展历程相对较短&#xff0c;但随着市场经济的深入发展和政府采购制度的持续改革&#xff0c;该行业已逐渐崭露头角&#x…

《遇见秋分》公众号排版模板,感受秋天的文艺唯美

秋分,是二十四节气之第十六个节气,秋季第四个节气。秋分这天太阳几乎直射地球赤道,全球各地昼夜等长。秋分&#xff0c;“分”即为“平分”、“半”的意思,除了指昼夜平分外,还有一层意思是平分了秋季。秋分日后,太阳光直射位置南移,北半球昼短夜长&#xff0c;昼夜温差加大,气…

ptmalloc源码分析 - Top chunk的扩容函数sysmalloc实现(09)

目录 一、sysmalloc函数基本分配逻辑 二、强制try_mmap分配方式 三、非主分配区分配的实现 1. 设置老的Top chunk的参数 2. 尝试使用grow_heap函数 3. 尝试使用new_heap函数 4. 尝试使用try_mmap方式 四、主分配区分配的实现 1. 设置Top扩容的size值 2. brk分配成功的…

(25)(25.1) 光学流量传感器的测试和设置

文章目录 25.1.1 测试传感器 25.1.2 校准传感器 25.1.3 测距传感器检查 25.1.4 预解锁检查 25.1.5 首次飞行 25.1.6 第二次飞行 25.1.7 正常操作设置 25.1.8 视频示例&#xff08;Copter-3.4&#xff09; 25.1.9 空中校准 25.1.1 测试传感器 将传感器连接至自动驾驶仪…

面试官:Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、Object.defineProperty 为什么能实现响应式 小结 二、proxy 三、总结 一、Object.defineProperty 定义&am…

vue打印、vue-print-nb插件的基本使用

今天做项目碰到一个打印的需求&#xff0c;只打印一个表格&#xff0c;去网上找了些方法总结一下 打印的方法最常见的就是window.print(),这是浏览器自带的打印方法&#xff0c;方便快捷无需安装插件&#xff0c;但相应的自定义化也差无法打印页面局部&#xff0c;去网上查找资…

薄盒借周杰伦IP卖藏品 车翻在奈雪的茶

在瑞幸联名茅台、喜茶联名FENDI、茶百道联名米哈游后&#xff0c;奈雪的茶搭上了周杰伦。9月14日&#xff0c;在《范特西》专辑发行22周年之际&#xff0c;奈雪的茶推出“范特西音乐宇宙”主题的奶茶与周边。 周杰伦系IP加持&#xff0c;奈雪的茶卖爆了&#xff0c;范特西Styl…

淘宝天猫商品全网搜索接口,关键词搜索商品列表数据接口,淘宝API接口申请指南

淘宝搜索接口是一种提供更便捷的淘宝商品搜索服务的工具。通过该接口&#xff0c;用户可以更加快速地找到自己需要的商品&#xff0c;节省时间和精力。 淘宝关键字搜索接口主要用于以下几个方面的业务应用&#xff1a; 商品搜索。用户可以根据关键字搜索他们想要购买的商品。…

生信学院|09月20日《在线焊件建模——xFrame》

课程主题&#xff1a;在线焊件建模——xFrame 课程时间&#xff1a;2023年09月20日 14:00-14:30 主讲人&#xff1a;武旭 生信科技 售后服务工程师 1、3DEXPERIENCE设计平台介绍 2、xFrame设计工具使用 3、Q&A 请安装腾讯会议客户端或APP&#xff0c;微信扫描海报中的…

【深度学习】clip-interrogator clip docker 容器启动过程

文章目录 dockerfile备忘ENTRYPOINT ["bash", "/app/startProject.sh"]常用docker指令web服务脚本访问接口文件 给一张图片&#xff0c;输出图片描述。 dockerfile备忘 只有从dockerfile制作的镜像才有分层结构&#xff0c;加速传输&#xff0c;故第一步…