C语言数据结构算法——时间复杂度

简介: 一,逻辑结构描述的是关系,与数据元素本身特点及计算机参数等没有关系。与数据元素本身的形式,内容,大小个数等无关的是数据的(B)A.存储结构 B.逻辑结构 C.储存实现 D.运算实现从逻辑上可以把数据结构分成(线性结构与非线性结构)下面那个是非线性数据结构的(A)A.树 B.字符串 C.队列 D.栈二,算法的五个特性:有穷,确定,可行,输入和输出.三,算法的四个评测准则:正确性,可读性,健硕性,高效性(用时间复杂度来判断)二三分析:给选项形容词前添加“不”字,如果可以接受,说明是评价准则,否则是必须满足的特性。如“不健壮”或“不高效”仍然是能作为一个算法的,只是变得不够完美。

一,逻辑结构描述的是关系,与数据元素本身特点及计算机参数等没有关系。

与数据元素本身的形式,内容,大小个数等无关的是数据的(B)

A.存储结构 B.逻辑结构 C.储存实现 D.运算实现

从逻辑上可以把数据结构分成(线性结构与非线性结构)

下面那个是非线性数据结构的(A)

A.树 B.字符串 C.队列 D.栈

二,算法的五个特性:

有穷,确定,可行,输入和输出.

三,算法的四个评测准则:

正确性,可读性,健硕性,高效性(用时间复杂度来判断)


二三分析:给选项形容词前添加“不”字,如果可以接受,说明是评价准则,否则是必须满足的特性。如“不健壮”或“不高效”仍然是能作为一个算法的,只是变得不够完美。但是“不可行”或“不确定”就无法容忍了,一个算法不可行或者无法给出确定的结果就不能称之为算法。

四,算法复杂度是一个保证,在给定输入规模的情况下,用O(数量级)表示。

  1. 分析下列算法(程序段)的时间复杂度:(代码理解什么是时间复杂度)
//算法输入:n和mintans=0;
for(inti=0; i<n; i+=1)
{
for(intj=0; j<m; j+=1)
{
ans+=1;
    }
}

在给定算法输入n和m的情况下,该嵌套循环内的语句将至多执行nm次,因此运行时间的上限,也及是时间复杂度是O(mn)。

  1. 分析下列算法时间复杂度:(怎么计算时间复杂度)
//算法输入:大小为n的数组nums,一个整数valfor (inti=0; i<n; i+=1){
if(nums[i] ==val){
returni;
    }
}

最坏的情况下,val位于nums的最后一位,循环内的if判断需要执行n次,因此时间复杂度为O(n)

,换句话说,这个算法保证在执行至多n次判断后就能结束.

  1. 分析下列算法时间复杂度:(规定执行次数怎么办?)
//算法输入:nfor (inti=0; i<n; i+=1){
if(i>1000)
break;
ans+=i;
}

无论输入n是多少,都循环至多执行1000次,因此时间复杂度为0(1000),也即常数复杂度不管这个常数多大,我们都认为他是0(1).

  1. 分析下列算法时间复杂度:(呈对数或线性关系分析)
//算法输入:nintans=0;
for (inti=1; i<=n; i+=1){
for (intj=1; j<n; j*=2){
ans+=i;
        }
}

内层循环(j)次数和n呈对数关系 →因此内层复杂度为0(log(n)).

外层循环(i)次数和n呈线性关系 →即执行n次0(log(n))的内层循环,得到0(n*log(n)).

  1. 分析下列算法时间复杂度:(内层循环的上限在变动
//算法输入:nintans=0;
for (inti=1; i<=n; i+=1){
for (intj=1; j<i; j+=1){
ans+=i;
        }
}

对i为0,1,2,......,n-1时,内层循环次数为:0,1,2,3,......,n-1求和得到的表达式中,最高阶的项是n²,因此整个表达式数量级是n²,即最终答案为O(n²)(内层循环的上限在变动)。

五.算法复杂度描述的是算法执行时间的增加和输入规模的增加呈何种关系。

  1. 在算法输入规模为n时,算法运行时间正比与9log(3的n次方),则该算法的时间复杂度为O(n).
  2. 9log(3的n次方) = 9nlog(3),对于算法的复杂度分析时,我们不关心常数和低阶项,只关心和输入规模n有关的数量级,因此0(9n*log(3)) → O(n)。

2.O(3n)是O(n)的三倍.

3.算法时间复杂度定义:

 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。其中f(n)是问题规模n的某个函数。

4.随着n的增加,算法执行的的语句次数将增加!!!


相关文章
|
20天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
30 1
|
23天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
73 4
|
21天前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
20天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
19天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
21天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
43 5
|
20天前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
40 2
|
20天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
|
20天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
172 9