我们如何计算功能编程中的复杂性

时间:2013-11-18 00:18:35

标签: c# algorithm linq functional-programming

我正在接受.Net程序员职位的采访。 通常干预的问题之一是:算法分析,Big-O

例如

private int FindBigElement(long[] inputArray)
{
    long j = 0 ;
    long temp = 0 ;
    temp = inputArray[0];
    for (int index = 1; index < inputArray.Length; index++)

            if (inputArray[j] > temp) temp=inputArray[j] ;

    return temp; 
}

算法的复杂性为:O(n)

//在这种情况下,我正在使用LAMDA Expression 从逻辑上讲,我在where()和.Any()

中使用了一个循环
List<string> myList = new List<string>();

IEnumerable<string> results = myList.Where(s => s> myList.Any());

In this case, I am going through 

string result = myList.First(s => s> myList.Any());


string result = myList.Single(s => s> myList.Any());

PS:我可以使用.FindMax(),但我只是用这个算法来展示我想做的事情?

一般来说,我们如何计算函数式编程算法的复杂性?

1 个答案:

答案 0 :(得分:0)

我建议你看看this link,它解释了如何解决算法的时间复杂度。本质上,算法的复杂性由O(x)

定义

例如,O(n)是线性复杂度算法。这意味着完成算法所花费的时间与算法所需的输入量成线性关系。在大多数情况下,在创建算法时,您希望算法的时间复杂度为O(n)或更小。或者,如果时间复杂度为5N + 3,则意味着它完成5N次(n为输入)加上常数3,无论如何总是执行3次。通常常量是编程代码中不接受任何输入的东西,因此不会多次使用。

为了计算复杂度,我建议看一下this wikipedia article部分,它是常见时间复杂度的表,O(n)表示法的运行时间以及具有时间复杂性的算法示例。

最后,计算函数式编程的时间复杂度类似于计算OOP的时间复杂度

我希望这有帮助,如果您还有其他问题,请在此帖子中添加评论。