关于算法分析的基础问题

问题描述

关于算法分析的基础问题

用于丈量算法时间复杂度的O(n)、O(1)等是怎么算出来的,比如后缀计算表达式就是O(n),怎么算的。。

解决方案

简单来说,如果一个算法,按照数据输入量的增长,它的运算时间的增长是线性的,那么就是O(n)
比如说,线性搜索,后缀表达式的计算因为只要遍历一次表达式,并且无需回溯,那么也是O(n)。而二分搜索,很显然,需要搜索的次数肯定少于log2(n),所以就是O(logn)
如果一个算法,运行时间和数据量无关,那么就是O(1)。比如说判断链表是否为空,不管链表有多长,都只需要读取第一个元素,所以是O(1)。

如果你愿意分析代码,那么看下,如果是单个循环,循环结束变量和数据长度相关,那么就是O(n)。如果是二重循环,并且循环结束变量都和数据长度相关,那么就是O(n^2)。如果你不想分析代码,那么就用不同的数据量测试,并且得到运行时间。并且在纸上描点,如果基本看上去是线性的,那么就是O(n),如果是水平直线(没变化),就是O(1),如果是抛物线,就是O(n^2),如果是幂数(看上去越来越缓),就是O(logn),如果是双曲线(越发接近一个常数),就是O(1/n),等等。

解决方案二:

比如

 if(n>1){    //这里的判断的时间复杂度为 O(1)
    for(int i=0;i<n;i++){
           //这里做了从0到n的循环,那时间复杂度为O(n)
        }
    for(int i=0;i<n;i++){
               for(int i=0;i<n;i++){
                     //这里做了从0到n的两次循环,那时间复杂度为O(n*n)
                }
        }
 }

解决方案三:

表示看不懂,觉得是数学专业出身的一样。看着自己像一个小白。顶!大神!学习!

解决方案四:

关于复杂度(分为时间复杂度和空间复杂度)。算法导论的第一章就做了介绍,任何数据结构的书也都会介绍的~
楼上第一位回答的非常精辟!

解决方案五:

算法分析基础
【算法设计与分析基础】背包问题
(二) 算法分析基础

时间: 2024-09-20 00:04:44

关于算法分析的基础问题的相关文章

offsetParent 算法分析_基础知识

当调用元素 A 的 offsetParent 属性时,必须按以下算法返回元素. 以下任一条件为真时,返回 null,并停止本算法. A 是根元素. A 是 HTML 的 body 元素. 元素 A 的 position 属性计算值是 fixed.注 1 如果 A 是 HTML 元素 area,并且在其上级元素链中有 HTML 元素 map,返回上级元素链中距 A 最近的 HTML 元素 map,并停止本算法.注 2 如果以下任一条件为真时,返回距 A 最近的符合下述条件的上级元素,并停止本算法.

搜索引擎基础算法如何确定返回结果之算法分析

搜索引擎是否试图最佳匹配输入查询返回页面?如果你意识到这一点,你就会明白,为什么谷歌和其他搜索引擎会使用一个复杂的算法来确定什么结果他们应该返回?在该算法的因素中包括"硬因素",比如反响你链接到一个页面的数量,一些通过喜欢和+1功能实现的社会建议.这些通常都是一些外部影响,还有一些页面本身的因素,只有通过分析在线和离线因素可能为谷歌来确定哪些页面是背后问题的查询,对于这个谷歌将不得不分析一个页面上的文本. 1.TRUE或FALSE(真或假) 虽然搜索引擎在最近几年的发展中已经非常迅速,

编程所需的基础知识

编程所需的基础知识 编程所需的基础知识 想要在编程行业能够走的远,一些基础知识是不能少的,基础奠定了发展的方向.java私塾建议大家在学习java语言本身的同时学习一些其他计算机相关的基础课程. 1. 一定的英文阅读能力因为程序设计接触的很多文档都是以英文的形式提供的,而且新的技术资料都是英文的,要想第一手学会这些新技术就必须能看懂英文,多阅读英文资料,使用金山词霸等工具配合,长时间的处在这样的环境里,自然而然英语的阅读能力就提高了.一个阅读英文很困难的人,可以学会程序设计,但是不会有很深的造诣

“数据结构基础”系列网络课程主页

前言 自从下决心要解决学生动手能力差的问题,开始了课程实践资源的建设之旅:自迷上了翻转课堂,所教课程的视频,也就逐渐形成了体系.在为我自己的校内学生服务的同时,也希望能够让更多人有机会用到. 自全身心投入教学,收入.奖金的渠道也便收缩到了极致.接受CSDN学院商业运作的规则,将课程投放此处,一则创收一些,弥补付出数倍精力建设资源而只能喝大锅饭中稀粥中的不平衡,二则因免费带来的不珍惜也让自己有些不快.课程定价大概等值于一张景区门票,或者一块生日蛋糕,愿者自行决定. 为天下IT学子服务的诺言不变,为

数据结构和算法11 之基础排序

前10节我们学习了一些经典的数据结构,从这节开始,我们将学习一些排序算法.这一节我们先学习几个基础排序算法:冒泡排序,选择排序和插入排序. 1. 冒泡排序         冒泡排序算法运行起来非常慢,但在概念上它是排序算法中最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法.冒泡排序算法的基本流程是:每一轮从头开始两两比较,将较大的项放在较小项的右边,这样每轮下来保证该轮最大的数在最右边. 算法程序如下: [java] view plain copy   public void 

《逆袭大学》文摘——9.5 用算法和数学奠定专业基础

有不少读者给我来信,咨询的是关于数学和算法对学习计算机的意义.这样的话题,在我的专栏中很多文章里都提到过.在拙作<逆袭大学--传给IT学子正能量>中,在这方面写了不少文字,现将其中的9.5节全文摘录在此文中,以供参考. 更多话题,见<逆袭大学--传给IT学子正能量>全书目录. 9.5 用算法和数学奠定专业基础 一个程序设计的初学者,在刚刚开始学习时,会认为编程中语言是最重要的.没有语言,没有掌握好编程语言,写不出程序来.而后又知道熟练运用语言仅仅是学会了一种表达的方式而已,如同一个

【转】[转]黑鹰破解基础教程和VIP提高教程+天草破解教程

黑鹰破解基础教程和VIP提高教程+天草破解教程 第一课       破解工具的介绍 第二课       壳的介绍已经脱壳常用思路 第三课       手脱UPX的几种方法 第四课       手脱ASPack的几种方法 第五课       手脱FSG的几种方法 第六课       手脱PECompact的几种方法 第七课       手脱nspack(北斗) 第八课       手脱Yodas Crypter 第九课       手脱Telock 第十课       手脱PETITE和FSG 2

[C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章

        最近在做LeetCode的题目.面试和笔试后发现经常考察快速排序的知识.通过这篇文章介绍,能让你彻底的了解和学习快排,主要从一下三个部分进行介绍:         一.C语言实现qsort快速排序         二.快速排序的原理及手写快排源码         三.LeetCode关于Two Sum的快排实现 参考文献:        <算法分析与设计>关于分治法那章内容         如何利用C语言中的qsort库函数实现快速排序 - by:stpeace        

《算法导论(原书第3版)》一第一部分 基础知识

第一部分 基础知识 这一部分将引导读者开始思考算法的设计和分析问题,简单介绍算法的表达方法.将在本书中用到的一些设计策略,以及算法分析中用到的许多基本思想.本书后面的内容都是建立在这些基础知识之上的. 第1章是对算法及其在现代计算系统中地位的一个综述.本章给出了算法的定义和一些算法的例子.此外,本章还说明了算法是一项技术,就像快速的硬件.图形用户界面.面向对象系统和网络一样. 在第2章中,我们给出了书中的第一批算法,它们解决的是对n个数进行排序的问题.这些算法是用一种伪代码形式给出的,这种伪代码