时间复杂度

问题描述

已知M个数,长度为N的黑名单,查找这M个数是否在黑名单中,对简单的遍历查找(不对黑名单排序),问时间复杂度是多少?我认为是M*N, 同事说是N^2 那个对?

解决方案

O(m*n)
解决方案二:
同意这个说法:最小的时间复杂度是O(m+n),方法是为长度为N的黑名单建立一个一个Hash表,复杂度为N,然后对m个数字在Hash表里面进行查找,由于Hash表的复杂度为O(1),因此m个数字的复杂度为O(n),因此得出的结论为O(m+n)参见:http://www.01yun.com/other/20130426/382343.html
解决方案三:
最小的时间复杂度是O(m+n),方法是为长度为N的黑名单建立一个一个Hash表,复杂度为N,然后对m个数字在Hash表里面进行查找,由于Hash表的复杂度为O(1),因此m个数字的复杂度为O(n),因此得出的结论为O(m+n)
解决方案四:
o(m+n)
解决方案五:
我觉得应该是m*n吧,m个数都遍历n次=m*n

时间: 2025-01-24 15:29:05

时间复杂度的相关文章

各种排序的时间复杂度

平均时间复杂度: 插入排序 O(n^2)  冒泡排序 O(n^2)  选择排序 O(n^2)  快速排序 O(n log n) 堆排序 O(n log n)  归并排序 O(n log n)  基数排序 O(n)  希尔排序 O(n^1.25)

在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为?

问题描述 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? A o(n^2) B o(n^3) C o(n) D o(n+e) 答案是o(n+e)...不理解..求过程 解决方案 不对,这题应该选A 求顶点的入度的时间复杂度为O(e)*n=O(n*e) 遍历顶点的时间复杂度是O(n^2) 相加是O(n^2+n*e)=O(n^2) 解决方案二: 详细的解释http://www.cskaoyan.com/redir

php 常用算法和时间复杂度

本篇文章是对php中的常用算法以及时间复杂度进行了详细的分析介绍,需要的朋友参考下   按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3) 复制代码 代码如下: //二分查找O(log2n) function erfen($a,$l,$h,$f){ if($l >$h){ return false;} $m = intval(($l+$h)/2); if ($a[$m] == $f){ r

时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和做法. 如图所示,删除结点 i,那么只需找到 i 的前驱 h,然后连 h 到 j,再销毁i 即可.虽然可以安全的删除 i 结点,但是是顺序查找找到 i,之后删除,时间复杂度是 O(n)级别的.具体做法就是:顺序查找整个单链表,找到要删除结点 i 的直接前驱 h,把 h额 next 指向i 的 nex

时间复杂度问题求解明白

问题描述 时间复杂度问题求解明白 Int fact(int n) {if (n<=1) return 1: return n*fact(n-1): } A. O(log2n) B. O(n) C . (a log2n) D. O(n2) 为什么是B 我不是很明白 n的阶乘按理说不是n(n-1)吗 那么时间复杂度应该是D呀 解决方案 时间复杂度可以简单看成主要工作单元的调用的次数,比如说你题的主要工作单元是:n*fact(n-1),那么实际在整个运行中,调用的次数为 n-1次,那么复杂度取 0(n

算法分析-请问算法时间复杂度分析有多重要,需要什么数学工具?

问题描述 请问算法时间复杂度分析有多重要,需要什么数学工具? 请问算法时间复杂度分析有多重要,需要什么数学工具?有什么好的教材可以推荐,数学的教材或者计算机的教材 解决方案 算法时间复杂度是评估算法优劣的标准.告诉你一个简便地估算算法复杂度,且不要动脑筋的办法.任意程序,用数据量n 2*n 3*n ... 10*n的数据测试,得到运行时间t1 t2 ... t10如果时间差不多,那么就是O(1)如果时间线性增加,那么就是O(n)如果是抛物线增加,就是O(n^2)如果是指数增加,就是O(x^n)如

c++的问题-快速排序的时间复杂度O(nlogn)

问题描述 快速排序的时间复杂度O(nlogn) 谁可以解释下O(nlogn) 是什么意思吗..我知道n是需要循环的次数.logn呢.? 解决方案 logn是指用到了二分查找.即每次取之前总数的一半.直到最后一个就是我们要找的. 数学解释:假设原来总的个数为N个,每次查找为上一次的一半,经过x次找到我们要的结果. 公式表达:N*(1/2)^x=1;(x为指数) 解:x=log2(N)=logN(简写): 数学的计算相信你没问题的. 解决方案二: logn是数学运算符,表示以2为底n的对数. log

要求时间复杂度为O(n)的求两个位置之间最大值的算法

问题描述 要求时间复杂度为O(n)的求两个位置之间最大值的算法 把一串数(32位int型)放到Num中,求begin和end位置使得begin与end之间的是数字和最大,要求时间复杂度是O(n). 注:不可以先排序,这串数字的位置不能改变. 最好有源码,思路也可以. 解决方案 #include #include int getmax(int first, int second) { return first > second ? first : second; } int main() { in

PHP 巧用数组降低程序的时间复杂度_php技巧

关于作者 王丹丹 , IBM 中国系统与技术中心软件工程师,自从 2006 年加入 IBM,一直从事 Web 系统设计和开发工作,有五年 PHP 应用程序设计开发经验. 通常开发人员在写程序的时候,往往是把已经设计好或者构思好的运算逻辑,直接用编程语言翻译出来.程序能顺利编译通过,那是很令人高兴的事情.如果此时程序的运行时间还能接受,就会沉浸在写代码的成就感当中,常常在这个过程中忽略代码的优化.只有当程序运行速度受到影响时,才回过头去考虑优化的事情.本文主要是介绍在 PHP的编程中,如何巧用数组

PHP 用数组降低程序的时间复杂度_php技巧

而随着设备硬件配置的不断提升,对中小型应用程序来说,对算法的空间复杂度的要求也宽松了不少.不过,在当今 Web2.0 时代,对应用程序的时间复杂度却有了更高的要求. 什么是算法的时间复杂度呢?概要来说,是指从算法中选取一个能代表算法的原操作,以原操作重复执行的次数作为算法的时间量度.影响时间复杂度的因素有两个:一是原操作的执行时间,二是原操作因控制结构引起的执行次数.要把算法的时间复杂度降下来,降低原操作的执行次数是较为容易的方法,也是主要方法.本文所讲述的方法,是通过巧用 PHP 的数组,降低