Linux C 算法分析初步
来源:互联网 发布:手机还原软件 编辑:程序博客网 时间:2024/05/19 14:20
提到算法,必须提到数据结构,我们要知道一个著名公式:
数据结构 + 算法 = 程序
我们先看看下面这张图:
算法是什么?算法是一个有穷规则(或语句、指令)的有续集和。他确定了解决某一问题的一个运算序列,简单的说,就是解决某一问题的步骤描述。
一、算法的特性
1)有穷性 ——算法执行的步骤(或规则)是有限的;
2)确定性 ——每个计算步骤无二义性;
3)可行性——每个计算步骤嫩巩固在有限的时间内完成;
4)输入——算法有一个或多个外部输入;
5)输出——算法有一个或多个输出;
二、如何评价一个算法的好坏
1)消耗时间的多少;
2)消耗存储空间的多少;
3)算法的设计是否容易理解,是否容易编程实现,方便调试和维护;
三、时间复杂度
时间复杂度的概念:
1)问题的规模:输入数据量的大小,用n来表示;
2)算法的时间复杂度:算法消耗时间,它是问题规模的函数 T (n)。
1、语句的频度
语句的频度定义为可执行语句在算法(或程序)中重复执行的次数。若某语句执行一次的时间为t ,执行次数为f,则该语句所耗时间的估计为 t * f 。
以下面程序为例,求两个N阶方阵乘积:
- void MATRIXM(A,B,C)
- {
- float A[n][n],B[n][n],C[n][n];
- int i,j,k; // 语句频度
- for(i = 0;i < n; i++) // n+1
- for(j = 0;j < n;j++) // n(n+1)
- {
- C[i][j] = 0; // n*n
- for(k = 0; k < n;k++) // n*n(n+1)
- C[i][j] = c[i][j]+A[i][k]*B[k][j]; // n*n*n
- }
- }
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 算法分析初步
- Linux C 算法分析初步
- 算法分析初步
- 8.1算法分析初步
- 算法分析初步
- Linux C 初步(1)
- 算法分析之初步接触
- 算法与C程序设计初步
- linux 时钟源初步分析
- 简单的高效算法分析初步?
- Linux网桥源码框架分析初步
- 高效算法设计_算法分析初步(最大连续和)
- linux c语言初步编程学习
- Linux C编程Makefile编写初步
- Linux C编程Makefile编写初步-转
- Linux-(C)网络编程学习socket(初步)
- linux内核的I2C子系统详解3——i2c-core.c初步分析、I2C总线的匹配机制
- C语言之算法初步(汉诺塔--递归算法)
- Sort tuple or multiple field with operator
- vb简单实现运算符优先级的计算器
- Linux C 数据结构---线性表
- 原生Ajax与jQuery中的ajax操作
- Linux C 数据结构---单向链表
- Linux C 算法分析初步
- 31岁生日当天启程智能硬件机器人领域
- Linux C 数据结构—-循环链表
- [FAQ11862]user版本如何打开root权限
- 关于BETA、RC、ALPHA、Release、GA等版本号的意义
- 【MySQL】慢查询配置与分析
- [股票] 股票年度分析2015-4~2016-5
- 毕业三年,初心你忘记了吗?
- Linux C 数据结构——栈