C# 我们如何计算函数式编程的复杂性

C# 我们如何计算函数式编程的复杂性,c#,algorithm,linq,functional-programming,C#,Algorithm,Linq,Functional Programming,我正在接受.Net程序员职位的面试。 受访者通常会问的一件事是:算法分析,大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] &

我正在接受.Net程序员职位的面试。 受访者通常会问的一件事是:算法分析,大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; 
}
private int FindBigElement(长[]输入阵列)
{
长j=0;
长期温度=0;
温度=输入阵列[0];
for(int index=1;indextemp)temp=inputArray[j];
返回温度;
}
算法的复杂度为:O(n)

//在本例中,我使用的是LAMDA表达式 从逻辑上讲,我在where()中使用一个循环,在.Any()中使用另一个循环

List myList=new List();
IEnumerable results=myList.Where(s=>s>myList.Any());
在这种情况下,我正在经历
string result=myList.First(s=>s>myList.Any());
字符串结果=myList.Single(s=>s>myList.Any());
PS:我可以使用.FindMax(),但我只是用这个算法来展示我想做什么


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

我建议您看一看如何解决算法的时间复杂度。本质上,算法的复杂度由O(x)定义

例如,O(n)是一个线性复杂度算法。这意味着完成算法所需的时间与算法所需的输入量成线性关系。在大多数情况下,当创建算法时,您希望算法的时间复杂度为O(n)或更小。或者,如果时间复杂度为5N+3,这意味着它要执行5N次(n为输入)加上常数3,无论发生什么情况,它都要执行3次。通常,常量用于编程代码中不接受输入的内容,因此不会多次使用

为了计算复杂度,我建议看一看第节,这是一个常见时间复杂度表、O(n)表示法中的运行时间以及具有时间复杂度的算法示例

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


我希望这会有所帮助,如果你还有任何问题,请在这篇文章中添加评论。

完全相同。他们之间有什么区别?为什么你认为应该区别对待它们?PS:“函数式编程算法”——这是一个实现,而不是一个算法。任何算法本身都是编程语言/编程范式不可知的,可以在任何一种算法中实现。我不是问它们之间的区别,而是问以这种方式编写的一般解决方案之间的区别。使用Lamda表达式。还有其他复杂的场景,比如富博纳奇套房。我们可以使用Lamda表达式用一行代码来解决这个问题。“匿名函数”只是一种语言构造,就像的和函数定义一样。为什么你认为它使复杂性决定过程有所不同?您只需获取实现并计算它。那很容易。“我们可以使用Lamda表达式用一行代码来解决它”。您也可以用一行代码调用函数:
FindBigElement(arr)
。但是,您查看了它的实现,并声明它是
O(N)
。为什么不对
LINQ
方法做同样的事情呢?我脑海中闪现的唯一一个例子是:看看Scala,函数式语言。我们可以用一行代码解决这个问题。但计算这些算法的复杂度很复杂:
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());