java - 我不可能理解所描述的字符串搜索方法。什么是 uFFFF?

标签 java string performance algorithm binary-search

我正在阅读有关在排序的字符串数组中搜索(范围)字符串的内容。

它说:

If you want to find all strings starting with "h", you can run a binary search for the strings "h" and "h\uFFFF". This gives all the indexes of the band for all the keys that start with "h". Note that a binary search can return the index where the string would be even if it is not actually in the array.

这一段我什么都不懂。

什么是 h\uFFFF 它如何帮助/用于二进制搜索,最后一个句子是否也意味着即使此搜索也是错误的?

请帮助理解这里所说的内容?

最佳答案

\uFFFF 是 16 位“字母表”中最后排序的“字符”,即在任何有效字母、字符或特殊符号之后。

当您对排序数组中的字符串进行二进制搜索时,您会找到可以插入该字符串的位置。当您有多个相同的字符串时,您会在第一个字符串之前获得一个位置。当您在字符串后附加“字母表的最后一个字母”时,插入点将在最后一个相同的字符串之后,从而在排序数组中为您提供一系列相同的字符串。

想象一下:假设您不允许在单词中使用字母 Z。现在你有一个排序的字符串数组:

0   1   2   3   4   5   6
aab abb abc abc abd bcx bdy

如果您搜索 abc,二分查找会告诉您第一个可以插入它的位置,即 2。如果您搜索 abcZ,那么,二分查找将返回 4,因为 abcZ 按字母顺序紧跟在 abc 之后。这让您知道 2(含)和 4(不含)之间的范围被字符串 abc 占用。如果两次搜索都返回相同的数字,您就知道该字符串不存在于数组中。

在您引用的段落中,\uFFFF 扮演我示例中“禁用字母 Z”的角色。

关于java - 我不可能理解所描述的字符串搜索方法。什么是 uFFFF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9036241/

相关文章:

java - 如何使用 JGit 获取提交的文件列表

c++ - 保留硬盘中数据的物理地址

java - printf只在java中打印小数部分

python - 更正一个文件中的错误并将其写入新文件

string - 为什么MFC中有这么多字符串类型?

python - 三引号内可以有变量吗?如果是这样,怎么做?

python - 加速二维数组上的 NumPy 循环 - 删除相似的行

performance - "non power of 2 textures"的 GL_TEXTURE_2D 性能如何?

java - 在 Java 中显示 TIFF 图像

java - 如何在 Java 中只修剪空格而不\n