字符串比较的时间是O(n),n是字符串的长度。
但是根据测试数据,您可以手动优化匹配算法。我已经提到了一些。
优化一:
检查两个字符串的大小,如果不相等,返回false。因为这将停止进一步的 O(n) 比较,并节省时间。通常字符串数据结构将大小存储在内存中,而不是每次都计算它。这允许 O(1) 时间访问字符串大小。
实际上这是一个巨大的优化。我将通过计算摊销时间复杂度来解释如何。
如果您的字符串数据结构可以有一个最大大小为 x 的字符串,那么总共可以有 (x + 1) 个可能的字符串大小 (0, 1, 2, ... , x)。
有(x + 1)选择2种方式选择两个字符串 = x * (x + 1) / 2
如果您使用优化 1,那么只有当两个字符串长度相等时,您才需要比较整个长度。只有 x + 1 个这样的情况。完成的操作数将是 0 + 1 + 2 + .... + x = x * (x + 1) / 2 。
剩余的 (x + 1) * (x - 2) / 2 个案例将在 O(1) 时间内计算。
因此总计算 = x * (x + 1) / 2 + (x + 1) * (x - 2) / 2 = (x + 1) * (x - 1)是 O(n^2)。由于我们正在进行 x * (x + 1) / 2 字符串比较,因此 每次比较的摊销时间复杂度为 O(1)。
如果没有任何优化,就会有
0 + 1 * (x) * 1 + 2 * (x - 1) * 2 + 3 * (x - 3) * 3 + .... + x/2 * x/2 * x /2 计算。毫无疑问,这将超过 O(n^3)。并且摊销时间复杂度将超过 O(n)。
优化 2:
由于您的数据库包含网络链接,它们可能属于同一个网站,因此它们的前几个字符将始终相同。这将导致多余的 CPU 时间使用。因此,最好从结尾检查这种情况,因为相对链接只会与结尾不同。
注意
从理论上讲,我们并不是在开发一种可以改变最坏情况时间复杂度的算法,它仍然是 O(n)。我们只是在优化算法。