算法的空间复杂度量化算法运行所占的内存量,作为问题输入大小的函数。算法的空间复杂度通常使用大O表示法表示,其抑制乘法常数和低阶项。
我有一个C++代码片段。 int sumOfArray( int * arr, int size ) { 整数分辨率=0; 对于 ( int i=0 ; i 我有一个 C++ 代码片段。 int sumOfArray( int * arr, int size ) { int res=0; for ( int i=0 ; i<size; i++ ) res= res+arr[i]; return res; } 我对该代码片段的空间复杂度感到困惑。你能指导我它的复杂度是恒定的还是线性的? 程序中使用的空间通常是衡量除输入之外还读取/写入多少空间的指标。 在您的情况下,int * arr是您程序的输入(您可以使其成为const,而无需以任何其他方式修改您的程序)。 int sumOfArray( int const*const arr, int size ) { int res=0; for ( int i=0 ; i<size; i++ ) res= res+arr[i]; return res; } 由于您没有使用 arr 作为暂存空间,因此您用作暂存和输出空间的唯一数据是 res。 res的大小是sizeof(int),它不是输入参数的函数。 这意味着你的时间复杂度为 O(1)。 然而,这实际上并非如此,因为 arr 的元素总和的最大值随着 arr 中元素的数量而增长。 您编写的程序有一个错误 - 如果 arr 的元素加起来超过 int 的最大值,您的程序将无法回答问题。 要解决此问题,您需要将大小字段设置为 BigInt,并将返回值设置为 BigInt。 BigInt 以其大小的对数增长。 因此,“正确”的无错误版本的总和实际上会使用 O(log(n)) 空间。 然而,人们经常忽略由整数大小限制引起的 log(n) 因子,并假装整数可以容纳无限量的数据。 有趣的是,这个假设实际上使所有程序都占用 O(1) 空间,因为您可以细分无限的整数以在其中存储无限的数据。 ;)
我有一个C++代码片段。 int sumOfArray( int * arr, int size ) { 整数分辨率=0; 对于 ( int i=0 ; i 我有一个 C++ 代码片段。 int sumOfArray( int * arr, int size ) { int res=0; for ( int i=0 ; i<size; i++ ) res= res+arr[i]; return res; } 我对该代码片段的空间复杂度感到困惑。你能指导我它的复杂度是恒定的还是线性的? 程序中使用的空间通常是衡量除输入之外还读取/写入多少空间的指标。 在您的情况下,int * arr是您程序的输入(您可以使其成为const,而无需以任何其他方式修改您的程序)。 int sumOfArray( int const*const arr, int size ) { int res=0; for ( int i=0 ; i<size; i++ ) res= res+arr[i]; return res; } 由于您没有使用 arr 作为暂存空间,因此您用作暂存和输出空间的唯一数据是 res。 res的大小是sizeof(int),它不是输入参数的函数。 这意味着你的时间复杂度为 O(1)。 然而,这实际上并非如此,因为 arr 的元素总和的最大值随着 arr 中元素的数量而增长。 您编写的程序有一个错误 - 如果 arr 的元素加起来超过 int 的最大值,您的程序将无法回答问题。 要解决此问题,您需要将大小字段设置为 BigInt,并将返回值设置为 BigInt。 BigInt 以其大小的对数增长。 因此,总和的“正确”无错误版本实际上会使用 O(log(n)) 空间。 然而,人们经常忽略由整数大小限制引起的 log(n) 因子,并假装整数可以容纳无限量的数据。 有趣的是,这个假设实际上使所有程序都占用 O(1) 空间,因为您可以细分无限的整数以在其中存储无限的数据。 ;)
trie 相当于 C++ 中的 std::map<std::string, int> 吗?
trie 的通常实现相当于 标准::地图 在 C++ 中? 所谓等价,我的意思是:它们是否具有相同的空间复杂度,以及它们各自的操作...
我正在做一个测验,这是提出的问题之一: 您已经在平衡二叉搜索树上实现了一些递归算法,其中部分需要在左侧递归,然后重新...
我正在解决一道leetcode问题。 问:给定一个字符串数组 strs,将所有字谜词组合在一起 子列表。您可以按任何顺序返回输出。 注意:strs[i]由小写英文组成
我想出了一个解决 LeetCode 问题的解决方案,称为“在字符串游戏 I 中查找第 K 个字符”。问题是我的解决方案的时间复杂度 (O) 是多少?我认为必须有 O(L...
美好的一天!我在链接中看到了回溯子集生成算法: https://www.geeksforgeeks.org/backtracking-to-find-all-subsets/ 它声称程序的空间复杂度是 O(n)...
Floyd–Rivest 与 Introselect 算法性能
Google 无法帮助我,所以这里是:FloydRivest 算法和 Introselect 这两种选择算法中哪一个具有更好的性能。 我假设它是 FloydRivest 算法,但想要...
我正在尝试解决这个挑战: 您有一个大小为 n 的整数列表,表示产品的成本。您有一个折扣价格,最多可以使用 k 次来购买产品。 你可以...
有两种实现 BFS 来查找两个节点之间的最短路径的方法。第一种是使用列表的列表来表示路径队列。另一个是维护每个的映射...
想象一下,您循环了 n 次,并且每次迭代都会创建一个空间 n 的字符串,其范围仅在该迭代内(因此在下一次迭代中不再可访问)。我会看着并说...
我在这里尝试了这个问题:如何确定字符串的最小公约数? 我认为我有正确的实现,但我不确定时间和空间的复杂性。它本身...
对于任务: 给定一个整数数组 nums 和一个整数 val,就地删除 nums 中所有出现的 val。元素的顺序可以改变。然后返回 nums w 中的元素数量...
我正在做Dijkstra算法的一些Leetcode问题,我不太明白它的空间复杂度。我上网查了一下,但找到了各种各样的答案,有些还相当复杂......
代码中语句、缩进和注释之间的间距会影响其时间和空间复杂度吗?
我试图了解代码格式和文档如何影响程序的性能 语句之间的间距:代码语句之间有更多或更少的空白行。 缩进...
我正在写这段代码,我很困惑这道题的空间复杂度是O(N)还是O(N^2)。 这是我想知道其复杂性的函数: 静态对[] allPairs(int x,...
为什么时间复杂度 O(2^N ) 不能降低到 O(2*2*2*...*2^0)=O(1)?
考虑时间复杂度 O(5N2)。通过消除常数因子 5,我们将时间复杂度表示为 O(N2)。 现在,如果时间复杂度为 O(2N),我们可以将其重写为 O(2⋅2N-1)。 T...
为什么不能继续消除指数时间复杂度示例2^N,而是继续消除常数,最后变成0(1)
考虑时间复杂度(5N^2)。通过消除常数因子 5,我们将时间复杂度表示为 (O(N^2))。 现在,如果我们的时间复杂度为 (2^N) 并将其修改为 (2 cdot 2^{N-1})...
以下代码的空间复杂度是多少? 定义 f(n): 总和 = 0 如果 n == 0: 返回1 别的: 对于范围 (n) 内的 i: 总和 = 总和 + f(i) 返回总和 所以,这个...
我在 GFG 上看到了以下问题,查找二叉树中是否存在大小为 2 或更大的重复子树。 现在,练习题要求和文章里到处都写着...