C语言算法的定义及分析详解
目录
- 算法的定义
- 算法和程序的区别
- 算法
- 程序
- 算法的性质
- 算法的表示
- 算法的分析
- 分析原则
- 常用的复杂性函数
- 算法分析基本法则
- 非递归算法:
- 总结
算法的定义
算法是一系列良定义的计算步骤
算法和程序的区别
算法
算法是指解决问题的一种方法或一个过程。
算法是若干指令的有穷序列,满足性质:
1.输入:有外部提供的量作为算法的输入。
2.输出:算法产生至少一个量作为输出。
3.确定性:组成算法的每条指令是清晰,无歧义的。
4.有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。
程序
1.程序是算法用某种程序设计语言的具体实现。
2.程序可以不满足算法的性质(4)。
3.例如操作系统,是一个在无限循环中执行的程序,因而不是一个算法。
4.操作系统的各种任务可看成是单独的问题,每一个问题由操作系统中的一个子程序通过特定的算法来实现。该子程序得到输出结果后便终止。
算法的性质
有穷性:算法必须在有限步骤后终止
确定性:算法必须是没有歧义的
可行性:可以机械的一步步执行
算法的表示
自然语言、编程语言、伪代码
算法的分析
分析原则
1.统一机器性能
2.情况最坏分析
算法运行时间仅依赖于输入规模n,表示为T(n)
渐进分析
渐进记号
常用的复杂性函数
算法分析基本法则
非递归算法:
1.for / while 循环
循环体内计算时间循环次数;
2.嵌套循环
循环体内计算时间*所有循环次数;
3.顺序语句
各语句计算时间相加;
4.if-else语句
if语句计算时间和else语句计算时间的较大者。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
相关推荐
-
C语言 奇偶排序算法详解及实例代码
C语言奇偶排序算法 奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算.这是与冒泡排序特点类似的一种比较排序.该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶对是错误的顺序(第一个大于第二个),则交换.下一步重复该操作,但针对所有的(偶-奇)位置数字对.如此交替进行下去. 使用奇偶排序法对一列随机数字进行排序的过程 处理器数组的排序 在并行计算排序中,每个处理器对应处理一个值,并仅有与左右邻居的本地互连.所有处理器可同时与邻居进行比较.交
-
C语言 选择排序算法详解及实现代码
选择排序是排序算法的一种,这里以从小到大排序为例进行讲解. 基本思想及举例说明 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置:然后,选出第二小的数,放在第二个位置:以此类推,直到所有的数从小到大排序. 在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换. 下面,以对 3 2 4 1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置. 第1轮 排序过程 (寻找第1小的数所在的位置) 3 2 4 1(最初, m
-
详解计数排序算法及C语言程序中的实现
关于计数排序算法 当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k).计数排序不是比较排序,排序的速度快于任何比较排序算法. 由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量内存.计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名.但是,计数排序可以用在基数排序中的算法来排序数据范围很大的数组. 算法的步骤如下: 找出待排序的数组中最大
-
C语言中使用快速排序算法对元素排序的实例详解
调用C语言的快速排序算法qsort(); #include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 100 //从小到大排序 int comp1(const void *x,const void *y) { return *(int *)x - *(int *)y; } //从大到小排序 int comp2(const void *x,const void *y) { return *(in
-
C语言实现九大排序算法的实例代码
直接插入排序 将数组分为两个部分,一个是有序部分,一个是无序部分.从无序部分中依次取出元素插入到有序部分中.过程就是遍历有序部分,实现起来比较简单. #include <stdio.h> void insertion_sort(int arr[], int array_length) { for (int i = 0; i < array_length; ++i) { int data = arr[i]; int j = 0; while (arr[j] < arr[i]) { j
-
C语言实现页面置换算法
本文实例为大家分享了C语言实现页面置换算法的具体代码,供大家参考,具体内容如下 操作系统实验 页面置换算法(FIFO.LRU.OPT) 概念: 1.最佳置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面:如无这样的页面存在,则选择最长时间不需要访问的页面.于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率. 2.先进先出置换算法(FIFO):是最简单的页面置换算法.这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时
-
C语言求解最长公共子字符串问题及相关的算法分析
题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输入两个字符串,求它们的最长公共子序列,并打印出最长公共子序列. 例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子序列,则输出它们的长度4,并打印任意一个子序列. 分析:求最长公共子序列(Longest Common Subsequence, LCS)是一道非常经典的
-
C语言算法的定义及分析详解
目录 算法的定义 算法和程序的区别 算法 程序 算法的性质 算法的表示 算法的分析 分析原则 常用的复杂性函数 算法分析基本法则 非递归算法: 总结 算法的定义 算法是一系列良定义的计算步骤 算法和程序的区别 算法 算法是指解决问题的一种方法或一个过程. 算法是若干指令的有穷序列,满足性质: 1.输入:有外部提供的量作为算法的输入. 2.输出:算法产生至少一个量作为输出. 3.确定性:组成算法的每条指令是清晰,无歧义的. 4.有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的
-
python机器学习算法与数据降维分析详解
目录 一.数据降维 1.特征选择 2.主成分分析(PCA) 3.降维方法使用流程 二.机器学习开发流程 1.机器学习算法分类 2.机器学习开发流程 三.转换器与估计器 1.转换器 2.估计器 一.数据降维 机器学习中的维度就是特征的数量,降维即减少特征数量.降维方式有:特征选择.主成分分析. 1.特征选择 当出现以下情况时,可选择该方式降维: ①冗余:部分特征的相关度高,容易消耗计算性能 ②噪声:部分特征对预测结果有影响 特征选择主要方法:过滤式(VarianceThreshold).嵌入式(正
-
C语言在头文件中定义const变量详解
C语言在头文件中定义const变量详解 在头文件中定义const不会有多变量的警告或错误,如果该头文件被大量包含会造成rom空间的浪费. 通过查看*.i文件的展开呢,可以发现每个.i文件都会有相应的变量展开. 查看*.map文件,能查看到该变量的多个地址分配. 在预编译的时候如果在头文件定义了const变量,每一个包含该头文件的c文件都会将其展开,而在编译的时候不会报错,因为这符合语法规则,每一个包含这个头文件的*.c文件都会编译一次这个变量,分配一个新的地址,然后在链接的时候也不会报错,因为每
-
C/C++语言宏定义使用实例详解
C/C++语言宏定义使用实例详解 1. #ifndef 防止头文件重定义 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成 一个可执行文件时,就会出现大量"重定义"的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定义. 方法:例如要编写头文件test.h 在头文件开头写上两行: #ifndef TEST_H #define TEST_H //一般是文件名的大写 头文件结尾写上一行: #endif 这样一个工程文件里同时
-
C语言关键字union的定义和使用详解
union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量. 但在"联合"中, 各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度 .一个联合体类型必须经过定义之后, 才能使用它,才能把一个变量声明定义为该联合体类型. 当定义结构对象时,如果没有显式地初始化它们,则会采用一般初始化规则:如果该结构对象属于动态存储类型,那么其成员具有不确定的初始值
-
C++ 匈牙利算法案例分析详解
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. -------等等,看得头大?那么请看下面的版本: 通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感(-_-||暂时不考虑特殊的性取向),如果一对男女互有好感,那么你就可以把这一对撮合在一起,现在
-
C语言中指针和数组试题详解分析
目录 数组题: 程序一(一维数组): 字符数组 程序二(字符数组): 程序三(字符数组): 程序四(字符数组): 程序五(字符数组): 二维数组 程序六( 二维数组): 指针题 程序七( 指针): 程序八( 指针): 程序九( 指针): 程序十( 指针): 程序十( 图): 程序十一( 指针): 程序十二( 指针): 程序十三( 指针): 指针 和 数组 试题解析 小编,在这里想说一下,c语言的最后一节 C预处理,可能还需要一些时间,因为小编,昨天才下载了虚拟机 和 linux 系统,还没开始安
-
C语言结构体数组的定义和使用详解
目录 介绍 结构体数组定义时初始化 补充 介绍 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这时就要使用数组.结构体中也有数组,称为结构体数组.它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项. 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组.或者说同前面介绍的普通数组
-
Go语言学习之函数的定义与使用详解
目录 1.函数定义 2.多值返回 3.引用传递 4.函数作为实参使用 5.匿名函数 1.函数定义 函数的定义和java一样,使用{}进行包裹,并且要明确入参类型以及返回类型. 样例代码如下: func min(num1, num2 int) int { if num1 <= num2 { return num1 } else { return num2 } } func main() { fmt.Printf("max = %d\n", min(10, 12)) } 执行结果 m
-
C语言学习进阶篇之万字详解指针与qsort函数
目录 前言 函数指针 代码一 代码二 函数指针数组 函数指针数组的用途 计算器的基本代码 函数指针实现简单的计算机 函数指针数组实现简单计算机 指向函数指针数组的指针 回调函数 简单的冒泡排序 冒泡排序的优化 qsort函数 qsort函数介绍 qsort实现冒泡排序 qsort排序结构数据 模拟实现qsort函数 写在最后 前言 前面学到了字符指针,指针数组是一个存储指针的数组,数组指针是一个指向函数的指针,数组参数和指针参数.其中不乏有很多需要注意的知识点,例如:&数组名和数组名表示的含义,
随机推荐
- 详解WordPress中简码格式标签编写的基本方法
- php+xml实现在线英文词典之添加词条的方法
- 在Python中使用PIL模块处理图像的教程
- js仿搜狐视频记录片列表展示效果
- asp有效防止网站留言板出现垃圾留言/评论实现思路
- jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
- Rsync ERROR: auth failed on module解决方法
- javascript实现全角半角检测的方法
- 资料:如何用虚拟机安装Windows Vista系统
- jQuery toggleClass应用实例(附效果图)
- javascript中的parseInt和parseFloat区别
- Android调用google地图生成路线图实现代码
- java 实现截取字符串并按字节分别输出实例代码
- 用javascript获得css中的属性值的代码
- 原生js实现网页顶部自动下拉/收缩广告效果
- php csv操作类代码
- 比Ghost更强 给系统做一个“影子分身术”
- 模仿J2EE的session机制的App后端会话信息管理实例
- windows环境下tensorflow安装过程详解
- 实例详解Linux 中的命令链接操作符