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的增加,算法执行的的语句次数将增加!!!


目录
打赏
0
0
0
0
108
分享
相关文章
|
4月前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
102 9
 算法系列之数据结构-二叉树
|
4月前
|
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
122 3
 算法系列之数据结构-Huffman树
|
4月前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
112 22
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
144 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
204 25
c语言及数据结构实现简单贪吃蛇小游戏
c语言及数据结构实现简单贪吃蛇小游戏
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
183 23
数据结构(C语言)之对归并排序的介绍与理解
归并排序是一种基于分治策略的排序算法,通过递归将数组不断分割为子数组,直到每个子数组仅剩一个元素,再逐步合并这些有序的子数组以得到最终的有序数组。递归版本中,每次分割区间为[left, mid]和[mid+1, right],确保每两个区间内数据有序后进行合并。非递归版本则通过逐步增加gap值(初始为1),先对单个元素排序,再逐步扩大到更大的区间进行合并,直至整个数组有序。归并排序的时间复杂度为O(n*logn),空间复杂度为O(n),且具有稳定性,适用于普通排序及大文件排序场景。
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
160 20
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
210 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问