后缀阵列&二进制搜索

时间:2017-01-14 01:44:46

标签: java binary-search suffix-array

我一直关注tutorial我找到了。然而,在C ++中,我使用Java,因此在翻译中可能会丢失一些东西。我在这里尝试使用谷歌搜索和搜索,虽然似乎有很多问题我仍然卡住了。虽然感觉我非常接近。

根据教程,应该匹配模式' nan'但是当我运行它时根本没有匹配。我错过了什么?对于粘贴时未格式化的代码,我们深表歉意。

package u1;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Scanner;

public class SuffixSort {
    public Element[] processPattern(String pattern) {
    Element[] patternArray = new Element[pattern.length()];
    for (int i = 0; i < pattern.length(); i++) {
        patternArray[i] = new Element(i, pattern.substring(i, pattern.length()));
    }

    Arrays.sort(patternArray);

    return patternArray;
}

public void binarySearch(String text, String pattern, Element[] array) {
    int left = 0, right = text.length() - 1;
    int mid = 0, result;

    while (left <= right) {
        mid = left + (right - left) / 2;
        result = pattern.compareTo(array[mid].getSuffix());

        if (result == 0) {
            System.out.println("Match: " + array[mid].getIndex());
            return;
        } else if (result < 0) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
}

public static void main(String[] args) {
    try {
        String text = "banana";
        String pattern = "nan";
        SuffixSort ss = new SuffixSort();
        Scanner in = new Scanner(new FileReader("src/resources/100k.txt"));

        /*
         * while (in.hasNextLine()) { text += in.nextLine(); }
         */

        Element[] suffixArray = ss.processPattern(text);

        double runtime = System.nanoTime();
        ss.binarySearch(text, pattern, suffixArray);
        runtime = (System.nanoTime() - runtime) / 1000000;

        in.close();

        System.out.println(runtime);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
}

其他课程

package u1;

public class Element implements Comparable<Element>{
private int index;
private String suffix;

public Element(int index, String suffix){
    this.index = index;
    this.suffix = suffix;
}

@Override
public int compareTo(Element o) {
    return this.getSuffix().compareTo(o.getSuffix());
}

public int getIndex() {
    return index;
}

public String getSuffix() {
    return suffix;
}

public void setSuffix(String suffix) {
    this.suffix = suffix;
}
}

0 个答案:

没有答案