Algorithm 通信复杂性
我正在向服务器发送字符串,并希望计算复杂性 对于每个字符串Algorithm 通信复杂性,algorithm,complexity-theory,time-complexity,Algorithm,Complexity Theory,Time Complexity,我正在向服务器发送字符串,并希望计算复杂性 对于每个字符串s我将发送s的所有前缀。因此,我首先发送一个字符,然后两个字符,然后三个。。。直到发送| s |字符 这里的通信复杂性是什么?我本来会说“O(| s |²),但我不确定 在另一个算法中,我为s中的每个字符发送一个固定大小的数据量,比如说100个字符。所以我发送了100个字符。现在应该是O(| s |)对吗?但哪一个更糟糕?显然,简而言之,第一种算法更好,还是我完全错了?如果我错了,请纠正我 发送一个字符,然后两个字符,然后三个。。。直到
s
我将发送s
的所有前缀。因此,我首先发送一个字符,然后两个字符,然后三个。。。直到发送| s |
字符
这里的通信复杂性是什么?我本来会说“O(| s |²),但我不确定
在另一个算法中,我为
s
中的每个字符发送一个固定大小的数据量,比如说100个字符。所以我发送了100个字符。现在应该是O(| s |)
对吗?但哪一个更糟糕?显然,简而言之,第一种算法更好,还是我完全错了?如果我错了,请纠正我
发送一个字符,然后两个字符,然后三个。。。直到
发送| s |字符
发送第一个字符时,是剩余字符(| S |-1)还是每次都重新开始|
- 对于第一种可能性:
- 关于第二种可能性: 1+2+…+a=| S|
线性时间复杂度一直都比较好,请查看本教程以了解有关第二种算法中让c表示因子的更多信息。在您的示例中,将c设置为100。然后,您的第二个算法将需要传输c*| s |字符。正如user3378649指出的,第一个算法需要传输| s |*(|s |-1)/2个字符 因此,现在应该很容易看出,只要c*| s |=|s |*(| s |-1)/2,或者更简洁地说,它们的成本是相等的: c=(|s |-1)/2 显然,如果c<(|s |-1)/2,则第二个算法的成本较低,如果c>(|s |-1)/2,则第一个算法的成本较低 话虽如此,您应将这些想法视为一个实际问题:
祝你好运 是的,这是第一个。但我想知道,假设我知道| s |总是小于100(线性时间复杂度有一个因子100),那么
|s | ^2
复杂度不是更有效吗?“有效”是非常主观的。如果您有两个解决方案,并且您想要进行比较,那么您可以根据big-O的复杂性来决定哪一个更有效。但在这种情况下,我不认为你有两种方法。如果s小于100,这不是问题所在(如果你知道排序算法,一些研究人员更喜欢使用插入排序,尽管事实上插入排序是二次的,当他们的元素较小时)