我有一个制表符分隔的UTF-8文件,其中的记录在一个字段上排序。但是,线的大小不是固定的,因此不能直接跳到特定位置。如何对此执行二进制搜索?

例:

第1行:Alfred Brendel / m / 011hww / m / 0crsgs6,/ m / 0crvt9h,/ m / 0cs5n_1,/ m / 0crtj4t,/ m / 0crwpnw,/ m / 0cr_n2s,/ m / 0crsgyh

第2行:Rupert Sheldrake / m / 011ybj / m / 0crtszs

最佳答案

您知道洞文件包含的字节数。可以说n
->搜索间隔[l, r]l=0r=n


估计您的搜索间隔m=(r-l)/2的中间。在此位置,向左移动尽可能多的字节(右侧也可以使用),直到找到制表符(byte == 9(9是制表符的ASCII和UTF8代码))为止[让此位置命名为mReal]并解码从该标签开始的一行。
确定下一个搜索步骤是否需要将第一个“一半”(=>新的搜索间隔是[l, mReal])或第二个“一半”(=>新的搜索间隔是[mReal, r])。

10-07 20:00
查看更多