簡體   English   中英

如何在Java 7+中的線性空間中構建后綴數組?

[英]How to build a suffix array in Java 7+ in linear space?

在Java前7版中,我可以簡單地執行以下操作:

public static String[] suffixes(String s)
{
    int N = s.length();
    String[] suffixes = new String[N];
    for (int i = 0; i < N; i++)
    suffixes[i] = s.substring(i, N);
    return suffixes;
}

但是,在Java 7中,substring方法返回一個新字符串。 因此消耗的空間將是O(n^2) ,其中n是字符串的長度。

在Java 7和更高版本中,有任何快速簡便的方法可以做到這一點嗎?

您當然可以發明一個抽象數據類型來表示“后綴數組”:

  • 用String初始化
  • 存儲收到的字符串,別無其他
  • 根據需要提供訪問器方法,例如:
    • size()
    • get(int n) -返回第n個元素
    • equals(int n, String s) -比較第n個元素和輸入
    • ...

根據您希望從該結構獲得的功能,可能有必要以不同的格式(例如,作為char[]或什至兩者)存儲基礎String。 其實沒關系,它是實現細節,被封裝,對ADT用戶隱藏。 首先創建一個interface並定義它需要支持的方法。

創建您自己的String(或后綴)類,如下所示

http://algs4.cs.princeton.edu/63suffix/SuffixArray.java.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM