当前位置: 首页 > news >正文

【数据结构与算法】算法(Algorithm)的基本概念与特性

什么是程序

算法+数据结构=程序 —— Nicklaus Wirth(尼古拉斯·沃斯)

Niklaus Wirth是一位著名的计算机科学家,他提出了"程序=算法+数据结构"的观点。他认为,程序不仅仅是执行特定任务的一段代码,而是由算法和数据结构两部分组成的。算法定义了程序如何操作数据以达到预期的结果,而数据结构则定义了程序如何存储和组织数据。


什么是算法

算法是解决特定问题的一系列明确的计算步骤。它是一组明确的规则,用于产生一个过程,这个过程在给定一定的输入后,能在有限的时间内得出结果。在计算机科学中,算法是用来操作数据、进行计算、自动推理和解决问题的方法。

常见的算法类型包括排序算法(如快速排序、归并排序等)、查找算法(如二分查找、哈希查找等)、图算法(如深度优先搜索、广度优先搜索、Dijkstra算法等)等。

算法的特性

  • 有穷性:算法在执行有限步骤后,必须能够结束。
  • 确定性:算法的每一步都有明确的含义,不会有二义性。
  • 可行性:算法是能够被执行的,即每一步都是可以实现的。
  • 输入:一个算法有0个或多个输入。
  • 输出:一个算法有1个或多个输出。

好算法的标准

  • 正确性:算法应能正确解决问题,对于合法输入能产生满足要求的输出。
  • 效率:算法应尽可能地减少计算资源的使用,包括时间和空间。
  • 简洁:算法应尽可能简单,易于理解和实现。
  • 健壮性:算法应对输入数据的不同情况都能正确处理,包括一些异常情况。

算法的效率评估

算法的效率通常通过时间复杂性和空间复杂性来评估。时间复杂性是指执行算法所需要的计算工作量,空间复杂性是指执行该算法所需要的存储空间。理想的算法通常是在满足问题要求的前提下,尽可能地减少所需的计算时间和存储空间。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++第二十八弹---进一步理解模板:特化和分离编译
  • [opencv]opencv源码编译cmake所需缓存文件cache文件下载地址汇总
  • c++初阶知识——string类详解
  • Java反射机制及其应用
  • 学习记录——day24 多进程编程
  • java远程调试
  • 转世重生之当程序员从零开始,不可错过的Jupyter Notebook的详细安装教程 ♪(^∇^*)
  • 【黑马java基础】网络通信
  • 远程连接工具连接不上虚拟机的解决方式(Xshell/Windterm...)
  • ECRS工时分析软件:工业工程精益生产的智慧引擎
  • 日本央行首次加息,同时缩减国债购买规模
  • 当服务器出现蓝屏时有哪些应对措施呢?
  • 智慧宿舍中的楼层管理
  • 图论之最短路径问题(朴素Dijksra算法\堆优化版Dijksra算法\Bellman-Ford\SPFA)
  • 超详细的MySQL CRUD 并配备了大量的测试用例, 包教包会
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【React系列】如何构建React应用程序
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS字符串转数字方法总结
  • Lsb图片隐写
  • tensorflow学习笔记3——MNIST应用篇
  • 给新手的新浪微博 SDK 集成教程【一】
  • 官方解决所有 npm 全局安装权限问题
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 用jquery写贪吃蛇
  • #数学建模# 线性规划问题的Matlab求解
  • ()、[]、{}、(())、[[]]命令替换
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (LLM) 很笨
  • (笔试题)分解质因式
  • (苍穹外卖)day03菜品管理
  • (多级缓存)多级缓存
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (六)激光线扫描-三维重建
  • (强烈推荐)移动端音视频从零到上手(上)
  • (生成器)yield与(迭代器)generator
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net 垃圾回收机制原理(二)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .Net中的集合
  • /bin/rm: 参数列表过长"的解决办法
  • /etc/skel 目录作用
  • [12] 使用 CUDA 进行图像处理
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [ACTF2020 新生赛]Include
  • [Android]Android开发入门之HelloWorld
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]