Algorithm 确定有无递归的时间复杂度
我正在从一本书中学习数据结构。在这本书中,他们在这一章的末尾有一些伪代码片段,我试图确定时间复杂度。我在理解时间复杂性中的一些概念时有点困难 我有两段代码做同样的事情,看看数组中的一个元素是否至少出现3次;但是,一个使用递归,另一个使用循环。两者我都有答案;有人能告诉我他们是否正确吗 第一种方式(无递归):Algorithm 确定有无递归的时间复杂度,algorithm,data-structures,recursion,time-complexity,Algorithm,Data Structures,Recursion,Time Complexity,我正在从一本书中学习数据结构。在这本书中,他们在这一章的末尾有一些伪代码片段,我试图确定时间复杂度。我在理解时间复杂性中的一些概念时有点困难 我有两段代码做同样的事情,看看数组中的一个元素是否至少出现3次;但是,一个使用递归,另一个使用循环。两者我都有答案;有人能告诉我他们是否正确吗 第一种方式(无递归): 布尔findTripleA(int[]anArray){ 如果(anArray.length=3){ 返回true; } } 返回false; } 我认为第一种方法在最佳和最坏情况下的时
布尔findTripleA(int[]anArray){
如果(anArray.length=3){
返回true;
}
}
返回false;
}
我认为第一种方法在最佳和最坏情况下的时间复杂度为O(n^2),因为无法避免内部for循环
第二种方法(使用递归):
公共静态整数findTripleB(int[]数组){
如果(anArray.length=0&&anArray[j]>元素){
anArray[j+1]=anArray[j];
j--;
}
anArray[j+1]=元素;
}
//检查数组是否包含三个连续的
//相同值的元素
对于(int i=0;i
我认为第二种方法的最坏情况时间复杂度为O(n^2),如果数组已经排序并且可以跳过插入排序,则最佳情况为O(n);但是,我不知道递归是如何起作用的。 < P>第一个例子中最好的例子是O(n)-考虑当出现的元素出现3次时会发生什么(它只在外循环的一次迭代后返回)。 第二种方法不使用递归,并且运行时间正确(从技术上讲,插入排序不会被“跳过”,但是在已经排序的数组上插入排序的运行时间是O(n)-只是确保我们在同一页上) 解决此问题的其他两种方法:
- 使用更好的方法进行排序,如合并排序。
将采取O(n log n)最好和最坏的情况 - 将元素插入要计数的元素的集合。
将采取预期的O(n)最坏情况,O(1)最佳情况