我正在接受.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(),但我只是用这个算法来展示我想做的事情?
一般来说,我们如何计算函数式编程算法的复杂性?
答案 0 :(得分:0)
我建议你看看this link,它解释了如何解决算法的时间复杂度。本质上,算法的复杂性由O(x)
定义例如,O(n)是线性复杂度算法。这意味着完成算法所花费的时间与算法所需的输入量成线性关系。在大多数情况下,在创建算法时,您希望算法的时间复杂度为O(n)或更小。或者,如果时间复杂度为5N + 3,则意味着它完成5N次(n为输入)加上常数3,无论如何总是执行3次。通常常量是编程代码中不接受任何输入的东西,因此不会多次使用。
为了计算复杂度,我建议看一下this wikipedia article部分,它是常见时间复杂度的表,O(n)表示法的运行时间以及具有时间复杂性的算法示例。
最后,计算函数式编程的时间复杂度类似于计算OOP的时间复杂度
我希望这有帮助,如果您还有其他问题,请在此帖子中添加评论。