我的算法的复杂性[重复]

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 减少?你的成本模型是什么? &lt; 是不变的吗?它在位数上是线性的吗? @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 是数组长度。

【讨论】:

以上是关于我的算法的复杂性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

算法空间复杂度教程[重复]

特定分治算法的复杂性

无法弄清楚这种重复的复杂性

TSP 算法的 BIG O 时间复杂度

时间复杂度和空间复杂度

时间复杂度 英文 怎么写?