我的算法的复杂性[重复]
Posted
技术标签:
【中文标题】我的算法的复杂性[重复]【英文标题】:Complexity of my Algorithm [duplicate] 【发布时间】:2017-05-31 13:47:09 【问题描述】:问题:哪种复杂性有我的功能?以及如何找到我的算法的时间复杂度?
该函数检查给定的 int 数组是否已排序。
我的代码:
public static boolean isSorted(double d[])
boolean sortedAscending = true;
boolean sortedDescending = true;
boolean bool = false;
for (int i = 0; i < d.length-1; i++)
if(d[i] > d[i+1] && sortedAscending)
sortedAscending = false;
if(bool)
break;
bool = true;
else if(d[i] < d[i+1]&& sortedDescending)
sortedDescending = false;
if(bool)
break;
bool = true;
return sortedAscending || sortedDescending;
【问题讨论】:
如果没有机器模型、成本模型和精确定义什么,那么谈论“时间复杂度”是没有意义的和 what 您认为是“输入大小”。那么,你的机器型号是什么?是图灵机吗?拉姆达微积分?内存?你在数什么?作业?平等测试? Lambda 减少?你的成本模型是什么?<
是不变的吗?它在位数上是线性的吗?
@JörgWMittag 时间复杂度是一个相当普遍适用的概念,它只告诉你事情如何扩展,因此不关心成本模型,你测量的往往是一切,输入大小可以是以任何对手头的问题最有意义的方式定义(在这种情况下为d.length
),如果您假设一切都按顺序执行(除非另有说明),那么机器模型似乎有些无关紧要。 “算法 X 的时间复杂度是 O(Y)”是我从无数来源看到无数次的东西,没有你提到的任何细节。
@JörgWMittag 另见How to find time complexity of an algorithm 和What is a plain English explanation of “Big O” notation?
@Dukeling:在 RAM 上复制一个列表是 O(n),在图灵机上是 O(n²)。 RAM 上基于比较的排序的最坏情况时间复杂度的下限是 O(n log n) 比较和交换,但在不同的机器模型上(例如,内存是线性的,而不是随机访问),它是O(n²)。所以,是的,机器型号确实很重要。问题中同样重要且完全缺失的是我们是在谈论最坏情况、最佳情况、平均情况还是摊销的最坏情况。此外,OP 是在寻找确切的复杂度函数还是近似值足够好?如果是,……
…近似值应该有多好? Bachmann-Landau-Notation 是否足够好,还是应该更精确?
【参考方案1】:
这只是一个单循环程序,在每次迭代中执行恒定时间。时间复杂度是线性的 - O(n)
其中n
是数组长度。
【讨论】:
以上是关于我的算法的复杂性[重复]的主要内容,如果未能解决你的问题,请参考以下文章