【发布时间】:2011-01-11 04:12:58
【问题描述】:
我正在尝试优化一个在 JavaScript 中对字符串进行二进制搜索的函数。
二分搜索要求您知道键是== 枢轴还是< 枢轴。
但这需要在 JavaScript 中进行两次字符串比较,这与 C 之类的语言不同,后者具有 strcmp() 函数返回三个值 (-1, 0, +1)(小于、等于、大于)。
在 JavaScript 中是否有这样的原生函数,它可以返回一个三元值,以便在二进制搜索的每次迭代中只需要一次比较?
【问题讨论】:
-
return str1 < str2 ? -1 : str1 > str2;? -
@1" 这不是最优的;需要两个字符串比较。
-
在我的机器上它仍然比
localeCompare()快一个数量级(!)。 @Gumbo 的自定义strcmp()可能会更快,这取决于字符串相等比较的内部实现的优化程度。 -
无论如何你都需要两个比较!,一个看是否 a > b 另一个看它们是否相等,javascript 非常快地确定字符串是否相等,因为如果它们相等,它们就是一个并且同一个对象,就像比较两个指针,字符串被“原子化”,存储在哈希表中,所以每个字母组合中,只有一个实例存在。
-
我建议重新打开此问题,而不是提及有关
strcmp的问题,即使该问题的答案相同,因为我认为并非所有搜索此问题答案的人都会了解strcmp。
标签: javascript string optimization comparison binary-search