哪个更快 - 字符串是等于或替换字符串

时间:2014-08-26 23:40:29

标签: string time-complexity

我认为这可能有点矫枉过正,但我​​只是好奇。一般来说(如果有一般性答案),假设字符串在50%的时间内彼此相等则更快:

void UpdateString1(string str1, string str2)
{
    str1 = str2;
}

void UpdateString2(string str1, string str2)
{
    if (str1 != str2)
    {
        str1 = str2;
    }
}

2 个答案:

答案 0 :(得分:1)

假设您的假设语言!=表示“比较”而=表示“复制”......

我要说UpdateString1总是至少一样快。

假设字符串不相等。然后UpdateString2执行比较以及分配。所以它做了额外的工作。

假设字符串相等。然后比较涉及迭代两个字符串中的每个字符并进行比较。那就是O(n)。同样,在最坏的情况下,复制将涉及访问一个字符串中的每个字符并将其复制到第二个字符串。也是O(n)。所以同样的复杂性。同样数量的内存访问。

但是你也得到了不相等的字符串的部分比较成本。我认为这有利于复制。


假设!==只是按身份比较或更新引用,而不是按值...

所有操作都是O(1)并且费用相同。 =是100%的一次操作。如果字符串在50%的时间内相等,则!= / =是预期的1.5次操作。

答案 1 :(得分:0)

如果您真的想检查str1!= str2,请使用str1 = str2;

  1. 代码更短,更容易理解。
  2. 分支比分配更复杂。如果赋值被认为是1个操作单元,那么分支平均可能是1.5个操作单元,如果传入的数据是随机的,则更多。请参阅:Why is it faster to process a sorted array than an unsorted array?
  3. 为此进行优化是过度的。