Atitit 算法的理解

目录

1. 算法(Algorithm),是程序的灵魂 1

2. 2. 算法的图形化表示 2

3. 3. 算法在实际软件开发项目中的应用 3

4. 算法的特点: 4

4.1. 1.      有穷性。 4

4.2. 2.      确定性。 4

4.3. 3.      有零个或多个输入。 4

4.4. 4.      有一个或多个输出。 4

4.5. 5.      有效性。 4

5. 怎样表示算法: 5

5.1. 1.      自然语言。 5

5.2. 2.      流程图。 5

5.3. 3.      用伪代码表示算法。 5

5.4. 4.      用计算机语言表示算法。 5

1. 算法(Algorithm),是程序的灵魂

【文章摘要】

        算法(Algorithm),是程序的灵魂。著名计算机科学家、图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序。可见,算法在程序中占有非常重要的地位。

在实际的软件开发项目中,不管是有意设计或是无意为之,我们几乎随时在和算法打交道。小到定义一个变量,大到编写一个函数,这些都是算法的实现过程。

本文以作者实际项目工作为背景,介绍算法在C程序中的应用。

【关键词】

C语言 算法  程序

1. 算法概述

什么是算法呢?先来看一看一些计算机书籍中的定义。

经典书籍《算法导论》(Cormen等著,机械工业出版社)中,作者认为算法是一系列的计算步骤,用来将输入数据转换成输出结果。

以上对算法的定义都是偏重理论,在实际的软件开发项目中,算法是用程序代码实现软件需求的方法,是软件开发工程师逻辑思维的体现。

2. 2. 算法的图形化表示

为了形象化地体现出算法,不同的学者设计出了不同的方法,这些方法包括:自然语言,流程图,N-S流程图,伪代码等。在实际的编程工作中,大都采用流程图来直观地表示算法。流程图逻辑清晰,很适合开发人员使用。

3. 3. 算法在实际软件开发项目中的应用

对于以算法立足的公司,像Google、百度等,算法就非常的重要,他们有专门的算法工程师岗位;对于做产品的公司,相对而言,做出产品来是最主要的,他们注重的是算法在产品中的应用。

但不管是专门的算法工程师,还是一般的软件开发工程师,我们都会经常与算法打交道。以下介绍作者本人在项目工作中所遇到过的一些算法问题。

. 总结

算法是计算机科学的基础,更是程序设计的基石,只有具备良好算法基础的人才能成为优秀的软件开发人员。

当然,在实际的软件开发中,遇到一个问题,我们也不能总想着用最复杂的算法来解决它,以显示出自己水平的高超。程序中的算法要力求简单、清晰、执行效率高。

爱因斯坦曾说过:“科学家应该使用最简单的手段达到他们的结论,并排除一切不能被认识到的事物”。也就是说,简单就是美。我们设计算法要遵循“奥卡姆剃刀原理”(即“简单有效原理”),该原理认为,切勿浪费较多东西去做用较少的东西同样可以做好的事情。在软件开发过程中,该原理同样适用。它要求我们要力求让自己的代码尽量简单直观,用较简单的算法实现用户要求的功能。

在学校学了很多算法理论,只有在实际的工作中才能够体会到它们的妙用。但在应用之前,一定要对各种算法的优劣及应用场景了然于心。

4. 算法的特点:

4.1. 1.      有穷性。

包含有限的操作步骤。

4.2. 2.      确定性。

算法中的每一个步骤都应当是确定的。

4.3. 3.      有零个或多个输入。

输入是指在执行算法时需要从外界取得必要的信息。

4.4. 4.      有一个或多个输出。

算法的目的是为了求解,“解” 就是输出。

4.5. 5.      有效性。

算法中的每一个步骤都应当能有效地执行,并得到确定的结果。

5. 怎样表示算法:

5.1. 1.      自然语言。

自然语言就是人们日常使用的语言,可以使汉语、英语、法语等语言。

用自然语言通俗易懂,但是文字冗长,容易出现二义性。

5.2. 2.      流程图。

流程图是用一些图框来表示各种操作。

用图形法表示算法,直观形象,易于理解。

5.3. 3.      用伪代码表示算法。

用流程图等图形工具来表示算法虽然简单明了,但是图形绘画和设计比较麻烦,而且实际中的算法需要进行动态修改,此时使用图形表示就不会很方便。这里就可以用伪代码来表示算法。

伪代码是用介于自然语言和计算机语言之间的文字和符号来表示算法。

例如打印输出x的绝对值,可以用下面伪代码实现:

如果x>0;

Print x;

如果 x<0;

Print –x;

5.4. 4.      用计算机语言表示算法。

例如输出1+2+3+……+100的值,可以用下面的C语言代码来实现:

00001.

<span style="font-size:14px;">#include <stdio.h>

00002.

00003.

void  main()

00004.

00005.

{

00006.

00007.

int sum = 0;

00008.

00009.

int i;

00010.

00011.

for (i = 0; i

00012.

程序的灵魂——算法 - CSDN博客.html

Atitit 算法的理解 目录 1. 算法(Algorithm),是程序的灵魂 1 2. 2. 算法的图形化表示 2 3. 3. 算法在实际软件开发项目中的应用 3 4. 算法的特点: 4 4.1.相关推荐

  1. xgboost简单介绍_好文干货|全面理解项目中最主流的集成算法XGBoost 和 LightGBM

    点击上方"智能与算法之路",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于 Boosting 框架的主流集成算法,包括 XGBoost 和 Ligh ...

  2. 软件开发实训需要用到的算法和结构_软件开发实习心得体会

    软件开发实习心得体会 [篇一:软件工程实训心得体会] 软件工程实训心得体会 软件工程实训心得体会一:软件工程实训心得体会 这次软件工程实训是从 2010.12.26 号开始的,截至 2010.12.3 ...

  3. CAx软件开发技术专题:后处理可视化常用算法

    后处理可视化是CAx软件的重要组成模块.开源代码VTK以其跨平台.丰富的数据结构与算法.可扩展性.易用性等特点而逐渐成为了CAx软件后处理首选的技术方案. 虽然VTK提供了相对完备的后处理功能,但要用 ...

  4. 软件开发实训需要用到的算法和结构_软件开发实习个人总结

    软件开发实习个人总结 软件开发实习不仅可以让我们掌握技术知识,更重 要的是学习到很多新的东西.以下是软件开发实习个人 总结,欢迎阅览 ! 软件开发实习个人总结 1 这次实训使我们明白我们所欠缺的不仅仅 ...

  5. 让你提前认识软件开发(14):程序中的算法

    第1部分 又一次认识C语言 程序中的算法 [文章摘要]         算法(Algorithm),是程序的灵魂.著名计算机科学家.图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序. 可见,算法 ...

  6. 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...

    操作系统 解释堆和栈的区别. 分配在堆的内存与分配在堆栈的内存有什么不同 分配在堆的内存要手动去释放 线程与进程的区别 多线程中栈与堆是公有的还是私有的 在多线程环境下,每个线程拥有一个栈和一个程序计 ...

  7. Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

    Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓  O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...

  8. 滑动窗口算法精讲(Sliding Window Algorithm)

    文章目录 滑动窗口算法精讲(Sliding Window Algorithm) 简介 步骤及算法模板 模板1 模板2 leetcode例题讲解 入门级 209. 长度最小的子数组 思路: 代码实现 2 ...

  9. viterbi算法通俗理解

    文章目录 viterbi算法是什么 手动理解 缺点分析 算法详解 算法推论 viterbi与隐马尔可夫 隐马尔科夫链的三个基本问题 隐马尔科夫链的五元组 更详细的解释 代码实现 实现 测试 参考 vi ...

  10. Interview:算法岗位面试—11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知、计算机视觉算法的理解、目标检测相关项目案例

    ML岗位面试:11.15下午上海某航天***公司(国企)技术面之工业机器视觉认知.计算机视觉算法的理解.目标检测相关项目案例 Interview:算法岗位面试-11.15下午上海某航天***公司(国企 ...

最新文章

  1. Xamarin无法调试Android项目
  2. Java经典面试题详解:Java字符串转成list
  3. 智慧城市:物联网安全需先行
  4. fastjson反序列化漏洞_漏洞预警Fastjson再爆反序列化代码执行漏洞;星巴克被发现存在信息泄露风险...
  5. iOS - OC Copy 拷贝
  6. #define和const的区别
  7. 关于一些Silverlight中常用的尺寸,慢慢记录
  8. 创建项目连接错误_EF6连接Postgresql数据库
  9. ubuntu 下 Aircrack 破解wifi密码(wpa/wpa2)
  10. dis的前缀单词有哪些_dis前缀的英语单词
  11. 第二次作业-分布式版本控制系统Git的安装与使用
  12. TCP套接口丢失与重传报文线索
  13. Acrobat如何将word文件转换成pdf格式
  14. HHTC第十二届程序设计竞赛
  15. poi操作word实现分页
  16. 论文阅读-VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
  17. 十进制转换成十六进制小程序(强制转换和移位运算符)
  18. HTML5的基础知识整理
  19. 瑞星2007----免费升级法。
  20. 男生的头发,隔多长时间理一次发最适合

热门文章

  1. mysql 不等于查询优化_MySQL查询性能优化
  2. 获取mysql存储过程返回值_MySQL函数,存储过程,用户管理
  3. Google Breakpad的使用
  4. 《调试软件》作者主页
  5. 系统引导过程总体介绍
  6. 关于SVN状态图标不显示的解决办法(史上最全)
  7. js之table操作
  8. QTQuick控件基础(1)
  9. 在 ReactNative 的 App 中,集成 Bugly 你会遇到的一些坑
  10. Memcached启动提示:cann't run as root without the -u switch