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

这篇具有很好参考价值的文章主要介绍了【数据结构与算法】一文带你学透——算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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


 【数据结构与算法】一文带你学透——算法,数据结构与算法(C语言版),算法

目录

前言

目录

一、算法的概述

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);
} 

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

总结

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


【数据结构与算法】一文带你学透——算法,数据结构与算法(C语言版),算法文章来源地址https://www.toymoban.com/news/detail-729823.html

到了这里,关于【数据结构与算法】一文带你学透——算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】一文带你掌握二叉树的构造与应用

    PS : 前面我们已经详细介绍了二叉树的概念以及二叉树的遍历的概念等,一些详细概念知识点可以在下面链接中的博客查看。本文主要需要使用代码自己实现二叉树及应用。 二叉树的概念及遍历 二叉树是由一个节点一个个连接而成的,每个节点最多连接两个节点,所以每个节

    2024年02月08日
    浏览(44)
  • 【数据结构】速速收藏,一文带你参透双向链表各接口实现

    目录 🥕前言🥕: 🌽一、双向链表概述🌽: 1.双向链表概念: 2.双向链表结构: 🍆二、双向链表接口实现🍆: 1.工程文件建立: 2.接口实现(本文重点): Ⅰ.双向链表初始化: Ⅱ.打印双向链表: Ⅲ.申请新节点: Ⅳ.双向链表尾插: Ⅴ.双向链表尾删: Ⅵ.双向链表头插

    2024年02月02日
    浏览(42)
  • 【数据结构】一文带你全面了解排序(下)——冒泡排序、快速排序、归并排序、计数排序

      目录 一、常见排序算法的实现   1.1 交换排序 1.1.1 基本思想 1.1.2 冒泡排序  1.1.3 快速排序 1.2 归并排序 1.3 非比较排序 二、排序算法复杂度及稳定性分析  人总得为过去的懒惰而付出点代价! 1.1.1 基本思想 基本思想:所谓交换,就是根据序列中两个记录键值的比较结

    2024年02月16日
    浏览(51)
  • 【数据结构】一文带你全面了解排序(上)——直接插入排序、希尔排序、选择排序、堆排序

    目录 一、排序的概念及其运用 1.1 排序的概念 1.2 常见的算法排序 二、常见排序算法的实现 2.1 插入排序 2.1.1 思想 2.1.2 直接插入排序 2.1.3 希尔排序(缩小增量排序)  2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2.3 堆排序  没有坚持的努力实质上并没有太大的意义

    2024年02月16日
    浏览(55)
  • 【数据结构与算法】三个经典案例带你了解动态规划

    从表中我们可以看到,最大的公共子串长度为2,一共有两个长度为2的公共子串,分别是第一个字符串的第2个字符到第3个字符和第一个字符串的第3个字符到第4个字符,即 ba 和 ac 根据上面的方法,我们来用代码封装一下求取最大公共子串的函数 function publicStr(s1, s2) { // 创建

    2024年04月09日
    浏览(95)
  • 手把手教你 ,带你彻底掌握八大排序算法【数据结构】

    直接插入排序是一种简单的插入排序法,其基本思想:是把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 可以理解为一遍摸扑克牌,一边进行排序 在待排序的元素中,假设前面n-1(其中n=2)个数

    2024年02月02日
    浏览(67)
  • 数据结构与算法——二叉树+带你实现表达式树(附源码)

    📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段, 因为最近参加新星计划算法赛道(白佬),所以加快了脚步,果然急迫感会增加动力 ——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的 📖作者主页:king南星 📖

    2024年01月25日
    浏览(50)
  • 【数据结构与算法】:带你手搓顺序表(C/C++篇)

    一、顺序表 1.1 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连

    2024年04月28日
    浏览(33)
  • 【数据结构与算法】一套链表 OJ 带你轻松玩转链表

    ✨个人主页:bit me ✨当前专栏:数据结构 ✨刷题专栏:基础算法   简介: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 示例1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例2: 输入:head = [], val =

    2024年01月22日
    浏览(48)
  • 【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法

    在上一篇中我们进行了的并查集相关练习,在这一篇中我们将学习图的知识点。 下面介绍几种在对图操作时常用的算法。 深度优先搜索(DFS)是一种用于遍历或搜索树、图等数据结构的基本算法。该算法从给定的起点开始,沿着一条路径直到达到最深的节点,然后再回溯到

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包