Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何编写函数来查找任何算法的时间复杂度和空间复杂度?_C++_Algorithm - Fatal编程技术网

C++ 如何编写函数来查找任何算法的时间复杂度和空间复杂度?

C++ 如何编写函数来查找任何算法的时间复杂度和空间复杂度?,c++,algorithm,C++,Algorithm,可能的重复项: 您好,我很想开发一个函数(比如computeComplexity()),它可以确定任何算法的时间复杂度和空间复杂度(比如bubbleSort()) computeComplexity()函数的用法如下所示 void bubbleSort() { computeComplexity();//Start monitoring memory consumption and time spent. .... .... //Sorting algorith

可能的重复项:

您好,我很想开发一个函数(比如
computeComplexity()
),它可以确定任何算法的时间复杂度和空间复杂度(比如
bubbleSort()

computeComplexity()函数的用法如下所示

void bubbleSort()
{
     computeComplexity();//Start monitoring memory consumption and time spent.
     ....
     .... //Sorting algorithm goes here
     ....
     computeComplexity();//Display time complexity and space complexity
}
输出看起来像

算法:冒泡排序

时间复杂度:O(n^2)

空间复杂度:O(n^2)

我还没有为此尝试任何方法


我想,最好先咨询一下这里的专家。

主要问题可能是不同的算法需要完全不同的输入。您可能可以编写一个函数来对排序函数的性能进行分类,因为它们都使用相同类型的输入,您可以生成一个越来越大的集合,以查看性能如何下降。

您可能可以编写一些可以比较一台机器上的复杂性的内容,但是一旦你把你的脚本放到另一台机器上,事情就会变得非常混乱。你必须找到校准它的方法,即使这样,它也只能在“完美”算法上工作。

。。。时间和空间的复杂性,我想你的意思是?在这种情况下,我看不出有什么方法可以像这里这样简单地使用启动/停止的思想来完成它-实际上,您需要解析代码以查找循环(时间复杂度)、在循环期间创建的变量(空间复杂度),计算代码的空间/时间复杂性主要是将许多不同类型的代码解析为已知的基本伪代码的练习。。。至少,解析需要花费大量的精力。这相当于确定。这是and的副本(可能还有其他副本)。作为总结,这里有一个速写:动态确定复杂性(即通过简单地运行算法并观察其行为)是不可能的,因为当问题规模接近无穷大时,渐近复杂性是渐近的。因此,你需要观察算法无限长的时间。静态地做是不可能的,因为确定时间复杂度也会确定停止(如果复杂度不是无限大,则算法停止),这是不可能的。