提到算法,必须提到数据结构,我们要知道一个著名公式:

  数据结构 + 算法 = 程序

我们先看看下面这张图:

算法是什么?算法是一个有穷规则(或语句、指令)的有续集和。他确定了解决某一问题的一个运算序列,简单的说,就是解决某一问题的步骤描述

一、算法的特性

1)有穷性  ——算法执行的步骤(或规则)是有限的;

2)确定性 ——每个计算步骤无二义性;

3)可行性——每个计算步骤嫩巩固在有限的时间内完成;

4)输入——算法有一个或多个外部输入;

5)输出——算法有一个或多个输出;

二、如何评价一个算法的好坏

1)消耗时间的多少;

2)消耗存储空间的多少;

3)算法的设计是否容易理解,是否容易编程实现,方便调试和维护;

三、时间复杂度

时间复杂度的概念:

1)问题的规模:输入数据量的大小,用n来表示;

2)算法的时间复杂度:算法消耗时间,它是问题规模的函数 T (n)。

1、语句的频度

      语句的频度定义为可执行语句在算法(或程序)中重复执行的次数。若某语句执行一次的时间为t ,执行次数为f,则该语句所耗时间的估计为 t * f 。

以下面程序为例,求两个N阶方阵乘积:

[cpp] view plaincopy
  1. void MATRIXM(A,B,C)
  2. {
  3. float A[n][n],B[n][n],C[n][n];
  4. int i,j,k;                                                 // 语句频度
  5. for(i = 0;i < n; i++)                                      //   n+1
  6. for(j = 0;j < n;j++)                               //  n(n+1)
  7. {
  8. C[i][j] = 0;                                  //   n*n
  9. for(k = 0; k < n;k++)                        //  n*n(n+1)
  10. C[i][j] = c[i][j]+A[i][k]*B[k][j];     //   n*n*n
  11. }
  12. }

2、算法的时间复杂度

算法的时间复杂度定义为算法中可执行语句的频度之和,记为T(n)。T(n) 是算法所需时间的一种估计,其中n为问题的规模(或大小、体积)。如上面的例子中,问题的规模n为矩阵的阶,该算法的时间复杂度为:

     T(n) = (n+1)+n(n+1)+n*n+n*n(n+1)+n*n*n = 2*n*n*n + 3*n*n +2*n +1

当n趋于无穷大时,lim(T(n)/(n*n*n) =2,故T(n)与n*n*n为同阶无穷大,或者说T(n) 与 n*n*n成正比、T(n)的量级为n*n*n,记为T(n) = O(n*n*n);

问题规模n的某个函数f(n),

    T(n) = O (f(n))

它表示岁问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。

Linux C 算法分析初步相关推荐

  1. Linux服务器的初步配置流程

    开发网站的时候,常常需要自己配置Linux服务器. 本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情.这主要是我自己的总结和备忘,如果有遗漏,欢迎大家补充. 下面的操作针 ...

  2. Linux grep 命令初步学习

    Linux grep 命令用于查找文件里符合条件的字符串. grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显 ...

  3. linux 线程学习初步01

    线程的概念 进程与线程内核实现 通过函数clone实现的 ps -Lf pid Linux内核线程实现原理 同一个进程下的线程,共享该进程的内存区, 但是只有stack区域不共享. 线程共享资源 a. ...

  4. linux c++ 多进程初步01

    fork函数 fork函数 ps ajx 这个命令可以查看进程与进程之间的血缘关系 kill 给进程发送一个信号SIGKILL 9号信号kill -SIGKILL pik 杀死进程 进程共享 子进程会 ...

  5. Linux服务器开发初步

      服务器开发需要考虑的内容很多,比如服务器的架构.稳定性.性能以及负载能力等等. 事实上,在开发服务器的过程中,需要综合考虑各种因素,比如就客户端连接时间较短却又比较频繁的服务器(例如HTTP服务器 ...

  6. 【嵌入式Linux应用】初步移植MQTT到Ubuntu和Linux开发板

    1. 概述 ​ 本篇主要是记录将MQTT移植安装到百问网STM32MP157开发板上,并且是跑一下MQTT的一个例程来验证,要完成本次移植安装,必须要保证电脑和开发板都能上网.. 2. 软件平台 ​ ...

  7. magicbox linux教程,天猫魔盒安装原生linux的一些初步成果

    ## 按 / j! g3 F8 V: \0 w4 _ ! G' G  ]) J, {+ m0 |" C/ Y一开始,我是想试试看能不能借由原生linux解决魔盒伪1080输出的问题.毕竟国内 ...

  8. Linux学习笔记3—Linux权限的初步认识(rwx、sudo、粘滞位、umask)

    文章目录 shell命令以及运行原理 如何开启当前用户的sudo命令 Linux权限管理 1 Linux用户类别 2 Linux的文件权限的理解 3 Linux文件权限的修改 I chmod-修改拥有 ...

  9. linux线程学习初步02

    杀死线程的函数 int pthread_cancel(pthread_t thread); 参数介绍:需要输入的tid 返回值:识别返回 errno成功返回 0 被杀死的线程,退出状态值为一个 #de ...

最新文章

  1. php如何添加超链接,如何使用phpcms添加超链接
  2. 用Access的iif代替SQL中的IsNull()
  3. IT项目监理的三种模式比较
  4. 程序猿要什么爱情,陪你未来的是键盘和代码啊!
  5. 创建SpringBoot项目时出现Cannot resolve plugin org.springframework的解决方法
  6. 《白帽子讲web安全》学习笔记 (3)
  7. Java线程学习笔记(两) 线程异常处理
  8. error: (-205:Formats of input arguments do not match) All the matrices must have the same data type
  9. 【案例】凤凰新华物流:探索智能化图书发行物流体系建设,助力出版行业担当文化建设使命-WMS
  10. Java利用libreOffice(jodconverter)将office(ppt,Excel,word,text)文档转换成pdf
  11. 疫苗接种 vaccine jab
  12. Laravel 论坛系统之消息通知功能
  13. dlink中设置端口映射图文讲解(解决电驴tcp链接测试失败问题)
  14. 高精度轻量级图像分割SOTA模型PP-LiteSeg开源
  15. 机器学习——线性回归衍生(过拟合、正则化、岭回归和LASSO回归)
  16. uniapp 监听网络情况
  17. 解决org.apache.ibatis.binding.BindingException Invalid bound statement (not found) com.fs.mapper.UserM
  18. K_A08_003 基于 STM32等单片机驱动L9110模块按键控制直流电机正反转加减速启停
  19. 海格里斯HEGERLS库架合一|仓储托盘四向穿梭车在冷库冷链行业中的应用
  20. 计算机mh,MH编码

热门文章

  1. 【转】android 中如何限制 EditText 最大输入字符数
  2. servlet乱码 解决方法 2种方法
  3. JavaScript函数绑定
  4. ubuntu下安装、卸载软件
  5. samba3.2的安装全过程(tar方式)
  6. 华三1822-24路由交换机配置例子
  7. leetcode 341. 扁平化嵌套列表迭代器(dfs)
  8. typescript 使用_如何使用TypeScript轻松修改Minecraft
  9. 实习生解雇_我们解雇了我们的顶尖人才。 我们做出的最佳决定。
  10. ember.js_如何设置基本的Ember.js应用