首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

究竟怎么才算是o(n)时间

2012-04-18 
究竟如何才算是o(n)时间?我现在有些搞不明白了打个比方一个数组8个元素 将其排序要求在o(n)时间内解出只是

究竟如何才算是o(n)时间?
我现在有些搞不明白了
打个比方
一个数组8个元素 将其排序要求在o(n)时间内解出

只是打个比方 
按照起泡排序
需要o(n^2)

然后 如果for(i = 1; i <=8; i++)
这样算是线性? 应该是因为1-8每个元素只便利了一遍
看下面
for(i = 1; i<=8; i++)
;
for(i = 1;i <= 8; i++)
;

也就是说1-8我循环了2次 
这种也属于o(n)时间内??还是o(2n)?

如果是o(2n)我就搞不明白了 
因为最近在做一道题 输油管道问题
里面的关键所在 就是求一些数的中位数 
比如说 1-8个元素 排好序之后 求之中的 中间那个数

通俗点说就是N个数求第K小的数是那一个 
我看了百度上的很多回答 都说这种解法 利用快速排序法
便可以在o(n)时间内完成

我仔细想想不对啊 1趟快排已经用了o(n)次 更何况1趟快排 不可能得到第K小的元素 
所以我现在有些搞不明白了 究竟怎样才算是o(n)??

[解决办法]
O(2n) 就是 O(n) 因为O里隐含了系数K

N个数求第K小的数
那个貌似是叫 nth-element 的吧
只是利用了快排的思想 并不是排序好了再取的
[解决办法]
最高次数是n的一次方就叫O(n)
n叫O(n),n/2叫 O(n),100*n+50 也叫O(n)


[解决办法]
由幂来确定,和系数无关,和常数无关
[解决办法]
大O表达式时间复杂度n的系数不用给出100000*n复杂度也算O(n)。关键是问题复杂度规模。可以考虑桶排序。
[解决办法]

探讨

由幂来确定,和系数无关,和常数无关

[解决办法]
O(N)说白是只需要遍历1次或是几次,1*n,2*n,这些都是属于0(n)
[解决办法]
一个数组8个元素 将其排序要求在o(n)时间内解出


这个题目问的不对,算法输入规模,不应该是常数,而是某个数量范围.

元素数量少,8个元素,冒泡是64,快排24次,没什么明显差异.

 1-8个元素 排好序之后 求之中的 中间那个数,O(1)就得到了

没排序的话,中位数是O(n)的,其实是O(K*n)因为K及其小,所以忽略

随便找一张牌,一堆比我大,一堆比我小;
向着中位数可能的那堆,丢弃另一堆,再重复这个过程;

次数的极限是常数,算法概论上有证明.

热点排行