sonek dizisi - Suffix array

sonek dizisi
Tip Dizi
Tarafından icat edildi Manber ve Myers (1990)
Zaman karmaşıklığı
içinde büyük Ç gösterimde
Ortalama En kötü durumda
Uzay
Yapı

Gelen bilgisayar bilimleri , bir sonek dizisi Sıralanmış olan dizi tüm son ekler a dize . Diğerlerinin yanı sıra tam metin indekslerinde, veri sıkıştırma algoritmalarında ve bibliyometri alanında kullanılan bir veri yapısıdır .

Sonek dizileri, Manber & Myers (1990) tarafından sonek ağaçlarına basit, alan açısından verimli bir alternatif olarak tanıtıldı . Bunlar bağımsız olarak 1987'de Gaston Gonnet tarafından PAT dizisi adı altında keşfedilmişti ( Gonnet, Baeza-Yates & Snider 1992 ).

Li, Li ve Huo (2016) , hem zaman hem de uzayda optimal olan ilk yerinde zaman eki dizisi oluşturma algoritmasını verdi; burada yerinde , algoritmanın yalnızca giriş dizesi ve çıkış eki dizisinin ötesinde ek alana ihtiyaç duyduğu anlamına gelir .

Gelişmiş son ek dizileri (ESA'lar), aynı zamanı ve bellek karmaşıklığını koruyarak son ek ağaçlarının tam işlevselliğini yeniden üreten ek tablolara sahip son ek dizileridir. Bir dizgenin tüm son eklerinin bir alt kümesi için sonek dizisine seyrek sonek dizisi denir . Optimum zaman ve bellek algoritması dahil olmak üzere ek bellek kullanımını en aza indirmek için çoklu olasılık algoritmaları geliştirilmiştir.

Tanım

Let bir -dize olsun ve ile kapsayıcı arasında değişen alt dizeyi belirtelim .

Eki dizisi içinde tanımlanmakta olup başlangıç pozisyonları sağlamaya tamsayı dizisi olmak üzere son ekler arasında içinde sözlük sırasını . Bu, bir girdinin -th en küçük son ekinin başlangıç ​​konumunu içerdiği ve dolayısıyla tümü için : anlamına gelir .

Her eki arasında yukarı gösterileri tam olarak bir kez. Son ekler basit dizelerdir. Bu diziler (kağıt sözlükte olduğu gibi), başlangıç ​​konumları (tamsayı indeksleri) içine kaydedilmeden önce sıralanır .

Örnek

Dizine alınacak = metnini düşünün : banana$

ben 1 2 3 4 5 6 7
B a n a n a $

Metin $, benzersiz ve sözlükbilimsel olarak diğer herhangi bir karakterden daha küçük olan özel nöbetçi harfle sona erer . Metin aşağıdaki eklere sahiptir:

son ek ben
muz$ 1
anana$ 2
büyükanne$ 3
ana$ 4
na$ 5
bir$ 6
$ 7

Bu son ekler artan düzende sıralanabilir:

son ek ben
$ 7
bir$ 6
ana$ 4
anana$ 2
muz$ 1
na$ 5
büyükanne$ 3

Sonek dizisi , bu sıralanmış son eklerin başlangıç ​​konumlarını içerir:

ben = 1 2 3 4 5 6 7
= 7 6 4 2 1 5 3

Açıklık sağlamak için altına dikey olarak yazılan son ekleri olan sonek dizisi:

ben = 1 2 3 4 5 6 7
= 7 6 4 2 1 5 3
1 $ a a a B n n
2 $ n n a a a
3 a a n $ n
4 $ n a a
5 a n $
6 $ a
7 $

Örneğin, 4 değerini içerir ve bu nedenle sonek olan içinde 4 konumundan başlayan son eki ifade eder . ana$

Ağaçların son ekine karşılık

Sonek dizileri, sonek ağaçlarıyla yakından ilişkilidir :

  • Sonek dizileri, bir sonek ağacının derinlik öncelikli geçişi gerçekleştirilerek oluşturulabilir. Kenarlar ilk karakterlerinin sözlükbilimsel sırasına göre ziyaret edilirse, sonek dizisi, geçiş sırasında bunların ziyaret edildiği sırayla verilen yaprak etiketlere karşılık gelir.
  • Bir sonek ağacı, sonek dizisi ve LCP dizisinin bir kombinasyonu kullanılarak doğrusal zamanda oluşturulabilir . Algoritmanın açıklaması için LCP dizisi makalesindeki ilgili bölüme bakın.

Her sonek ağacı algoritmasının, ek bilgilerle ( LCP dizisi gibi) geliştirilmiş bir sonek dizisi kullanan ve aynı problemi aynı zamanda karmaşıklıkta çözen bir algoritma ile sistematik olarak değiştirilebileceği gösterilmiştir . Son ek ağaçlarına göre son ek dizilerinin avantajları arasında iyileştirilmiş alan gereksinimleri, daha basit doğrusal zaman oluşturma algoritmaları (örneğin, Ukkonen'in algoritması ile karşılaştırıldığında ) ve geliştirilmiş önbellek yeri bulunur.

Alan verimliliği

Sonek dizileri , sonek ağaçlarının alan gereksinimlerini iyileştirmek için Manber & Myers (1990) tarafından tanıtıldı : Sonek dizileri tamsayıları depolar . Bir tamsayının bayt gerektirdiğini varsayarsak , bir sonek dizisi toplamda bayt gerektirir . Bu, dikkatli bir sonek ağacı uygulamasının gerektirdiği baytlardan önemli ölçüde daha azdır .

Ancak, bazı uygulamalarda, sonek dizilerinin alan gereksinimleri yine de engelleyici olabilir. Bit cinsinden analiz edildiğinde, bir sonek dizisi boşluk gerektirirken , alfabe boyutundaki orijinal metin yalnızca bit gerektirir . Olan bir insan genomu için ve ek dizisinden nedenle genomun kendisine göre 16 kat daha fazla bellek hakkında kaplar.

Bu tür tutarsızlıklar, sıkıştırılmış son ek dizilerine ve FM-endeksi gibi BWT tabanlı sıkıştırılmış tam metin dizinlerine yönelik bir eğilimi motive etti . Bu veri yapıları, yalnızca metin boyutunda veya daha az boşluk gerektirir.

İnşaat algoritmaları

Bir sonek ağacı oluşturulabilir ve ağaç derinliğini -önce 'de de geçerek bir sonek dizisine dönüştürülebilir , bu nedenle .

Bir sonek dizisi oluşturmak için naif bir yaklaşım, karşılaştırmaya dayalı bir sıralama algoritması kullanmaktır . Bu algoritmalar son ek karşılaştırmaları gerektirir , ancak bir son ek karşılaştırması zamanında çalışır , dolayısıyla bu yaklaşımın genel çalışma zamanı .

Daha gelişmiş algoritmalar, sıralanacak eklerin rastgele diziler olmayıp birbiriyle ilişkili olması gerçeğinden yararlanır. Bu algoritmalar aşağıdaki hedeflere ulaşmaya çalışır:

  • minimum asimptotik karmaşıklık
  • uzayda hafif, yani metnin yanında çok az veya hiç çalışma belleği yok ve sonek dizisinin kendisine ihtiyaç var
  • pratikte hızlı

Tüm hedeflere ulaşmak için ilk algoritmalardan biri Nong, Zhang & Chan'ın (2009) SA-IS algoritmasıdır . Algoritma da oldukça basittir (< 100 LOC ) ve aynı anda LCP dizisini oluşturmak için geliştirilebilir . SA-IS algoritması, bilinen en hızlı sonek dizisi oluşturma algoritmalarından biridir. Yuta Mori'nin dikkatli bir uygulaması, diğer doğrusal veya süper doğrusal inşaat yaklaşımlarının çoğundan daha iyi performans gösterir.

Zaman ve mekan şartlarına yanında eki dizisi inşaat algoritmaları ayrıca desteklenmektedir birbirlerinden ayrılırlar alfabenin : sabit alfabe alfabe boyutu sabit bağlı olan, alfabelere tamsayı karakterler bağlı olarak bir aralığın içinde tam sayılardır ve genel harfleri tek karakter karşılaştırmalar izin verilir .

Çoğu sonek dizisi oluşturma algoritması, aşağıdaki yaklaşımlardan birine dayanır:

  • Önek ikiye katlama algoritmaları, Karp, Miller & Rosenberg'in (1972) stratejisine dayanmaktadır . Buradaki fikir, son eklerin sözlükbilimsel sıralamasını onurlandıran önekleri bulmaktır. Değerlendirilen önek uzunluğu, bir önek benzersiz olana ve ilgili son ekin sırasını sağlayana kadar algoritmanın her yinelemesinde iki katına çıkar.
  • Özyinelemeli algoritmalar, bir ek alt kümesini özyinelemeli olarak sıralamak için Farach (1997) tarafından sonek ağacı oluşturma algoritmasının yaklaşımını takip eder . Bu alt küme daha sonra kalan son eklerin bir sonek dizisini çıkarmak için kullanılır. Bu son ek dizilerinin her ikisi de daha sonra son ek dizisini hesaplamak için birleştirilir.
  • Uyarılmış kopyalama algoritmaları, geri kalan son eklerin hızlı bir şekilde sıralanmasını sağlamak için zaten sıralanmış bir alt kümeyi kullanmaları bakımından özyinelemeli algoritmalara benzer. Aradaki fark, bu algoritmaların, seçilen son ek alt kümesini sıralamak için yinelemeyi yinelemeye tercih etmesidir. Bu çeşitli algoritmalar grubunun bir araştırması Puglisi, Smyth & Turpin (2007) tarafından bir araya getirilmiştir .

Tamsayılı alfabeler için iyi bilinen bir özyinelemeli algoritma, Kärkkäinen & Sanders'ın (2003) DC3/skew algoritmasıdır . Doğrusal zamanda çalışır ve paralel ve harici bellek soneki dizisi oluşturma algoritmalarının temeli olarak başarıyla kullanılmıştır .

Tarafından yapılan son çalışmalar Salson ve arkadaşları. (2010) , yeni bir sonek dizisini sıfırdan yeniden oluşturmak yerine, düzenlenmiş bir metnin sonek dizisini güncellemek için bir algoritma önermektedir. Teorik olarak en kötü durum zaman karmaşıklığı olsa bile , pratikte iyi performans gösteriyor gibi görünüyor: yazarlardan elde edilen deneysel sonuçlar, dinamik sonek dizilerinin uygulanmasının, içine makul sayıda harf eklenmesi düşünüldüğünde, genellikle yeniden oluşturmaktan daha verimli olduğunu gösterdi. orjinal metin.

Pratik açık kaynak çalışmasında, son ek dizisi yapımı için yaygın olarak kullanılan bir rutin, 1999 Larsson-Sadakane algoritmasına dayanan qsufsort idi. Bu rutinin yerini, 2017 itibariyle "ana bellekte bilinen en hızlı son ek sıralama algoritması" olan Yuta Mori'nin DivSufSort'u almıştır. O da bir LCP dizisini hesaplamak için değiştirilebilir. Itoh-Tanaka ile birlikte uyarılmış bir kopyalama kullanır. 2021'de Ilya Grebnov, Silesia Corpus'ta DivSufSort uygulamasına göre ortalama %65 performans artışı gösteren algoritmanın daha hızlı bir uygulamasını sundu.

Genelleştirilmiş Sonek Dizisi

Bir sonek dizisi kavramı birden fazla dizgeye genişletilebilir. Buna genelleştirilmiş son ek dizisi (veya GSA), bir dizi dize için tüm son ekleri içeren bir son ek dizisi denir (örneğin, ve her dizenin tüm son ekleriyle sözlükbilimsel olarak sıralanır.

Uygulamalar

Bir dizgenin sonek dizisi, dizge içinde bir alt dizgi modelinin her oluşumunu hızlı bir şekilde bulmak için bir dizin olarak kullanılabilir . Modelin her oluşumunu bulmak, alt dize ile başlayan her son eki bulmaya eşdeğerdir. Sözlüksel sıralama sayesinde bu ekler sonek dizisinde birlikte gruplandırılacak ve iki ikili arama ile verimli bir şekilde bulunabilecektir . İlk arama aralığın başlangıç ​​konumunu, ikincisi ise bitiş konumunu belirler:

n = len(S)
def search(P: str) -> Tuple[int, int]:
    """
    Return indices (s, r) such that the interval A[s:r] (including the end
    index) represents all suffixes of S that start with the pattern P.
    """
    # Find starting position of interval
    l = 0  # in Python, arrays are indexed starting at 0
    r = n
    while l < r:
        mid = (l + r) // 2  # division rounding down to nearest integer
        # suffixAt(A[i]) is the ith smallest suffix
        if P > suffixAt(A[mid]):
            l = mid + 1
        else:
            r = mid
    s = l
    
    # Find ending position of interval
    r = n
    while l < r:
        mid = (l + r) // 2
        if suffixAt(A[mid]).startswith(P):
            l = mid + 1
        else:
            r = mid
    return (s, r)

Tek bir son ek karşılaştırmasının karakterleri karşılaştırması gerektiğinden, uzunluk dizesinde uzunluğun alt dize modelini bulmak zaman alır . Manber & Myers (1990) , bu sınırın LCP bilgisi kullanılarak zamana nasıl iyileştirilebileceğini açıklar . Buradaki fikir, bunların kalıbın ve mevcut arama aralığının en uzun ortak önekinin parçası olduğu zaten bilindiğinde, bir kalıp karşılaştırmasının belirli karakterleri yeniden karşılaştırmasına gerek olmamasıdır. Abouelhoda, Kurtz ve Ohlebusch (2004) , sınırı daha da geliştirmiş ve sonek ağaçlarından bilinen bir arama süresi elde etmiştir .

Burrows-Wheeler dönüşümünü (BWT) hesaplamak için sonek sıralama algoritmaları kullanılabilir . MDK bir dizenin tüm döngüsel permütasyon sıralama gerektirir. Bu dize, diğer tüm karakterlerden (yani, $) sözlükbilimsel olarak daha küçük olan özel bir dize sonu karakteriyle bitiyorsa, sıralanmış döndürülmüş BWT matrisinin sırası, bir sonek dizisindeki son eklerin sırasına karşılık gelir. Bu nedenle BWT , önce metnin bir sonek dizisi oluşturularak ve ardından BWT dizesini çıkararak doğrusal zamanda hesaplanabilir : .

Son ek dizileri, örnek tabanlı makine çevirisinde alt dizeleri aramak için de kullanılabilir, bu da İstatistiksel makine çevirisinde kullanılan tam bir tümcecik tablosundan çok daha az depolama gerektirir .

Son ek dizisinin birçok ek uygulaması LCP dizisini gerektirir . Bunlardan bazıları , ikincisinin uygulama bölümünde detaylandırılmıştır .

Notlar

Referanslar

Dış bağlantılar