Java教程

算法的时间复杂度

本文主要是介绍算法的时间复杂度,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.什么是数据结构:
用于存储和组织数据的。
2.数据结构的分类:逻辑结构和物理结构。
逻辑结构:结构元素之间关系。
物理结构:计算机中的存储方式。
逻辑结构有四种:集合结构(元素之间属于同一个集合),线性结构(元素之间一对一的关系),树形结构(元素之间一对多的关系),图形结构(元素之间多对多的关系)。
物理结构:按照计算机上的真正的存储结构。顺序存储结构(数组),链式存储结构。
顺序存储结构:数据单元所占用的内存是连续的,具有索引,插入效率低(引入链式存储结构)。
链式存储结构:数据单元所占用的内存可连续,可不连续。数据单元之间应用指针进行指向,查找效率低,但插入效率高。
3.什么是算法:根据一定的条件,对某一些数据进行计算,得到需要的结果。
设计要求:花最少的时间完成需求,占用最少的内存空间。
例如:计算n!,可以应用递归的方式进行计算,但是调用函数时会占用栈中开辟的内存,执行n次,会占用n块内存,占用内存空间大。
4.时间复杂度分析:(程序的运行时间),事前分析法,事后分析法。
事后分析法:程序运行前记时,程序运行后记时。该方法受处理器影响大,且后天测试过程中若发现该程序运行时间过久,则代码浪费。
事后分析法:取决于:
*算法采用的策略和方法(A方案,B方案)
*编译产生的代码质量(编译器人为无法更改)
*问题的输入规模(输入大小人为可控)
*机器执行指令的速度(硬件)
分析算法复杂度时,为了让算法分析更具有调理,忽略条件语句,只关心核心操作次数f(n)和输入规模(n)之间的关系。
5.函数渐进增大:给定f(n),g(n),存在N,对于所有n>N,f(n)总是大于g(n),则称f(n)的增长渐进快于g(n).(影响算法增长速率的因素)
1.随着输入规模的增大,算法的常数操作可以忽略不记。
2.随着输入规模的增大,最高次幂的常数因子可以忽略不记。
3.随着最高次幂的降低,输入规模增大,算法效率越高。
时间复杂度表示方法:大O法,进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数。
T(n)=o(f(n))
推导大O阶法规则:
*用常数一代替运行时间中的所有加法常数。
*修改后的运行次数中,只保留高阶项。
*如果最高阶项存在且常数因子不为一,则去除与这个项目相关的常数。
常见的大O阶有:
线性阶(随着输入规模n时间复杂度呈线性变化),平方阶,立方阶,对数阶,常数阶。
函数调用时间复杂度分析,且需要考虑最坏的情况。
6.空间复杂度分析:计算机被访问的方式是一次一个字节(8位)。
S(n)=O(f(n))

这篇关于算法的时间复杂度的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!