Zacytuję problem z ACM 2003:
Rozważ ciąg długości n (1 <= n <= 100000). Określ jego minimalny obrót leksykograficzny. Na przykład obroty ciągu „alabala” to:
alabala
labalaa
abalaal
Balaala
alaalab
laalaba
aalabal
a najmniejsza z nich to „aalabal”.
Co do rozwiązania - wiem, że muszę zbudować tablicę sufiksów - i powiedzmy, że mogę to zrobić w O (n). Moje pytanie wciąż brzmi: jak znaleźć najmniejszy obrót w O (n)? (n = długość łańcucha)
Jestem bardzo zainteresowany tym problemem i nadal nie mam rozwiązania. Bardziej interesuje mnie koncepcja i sposób rozwiązania problemu, a nie konkretna implementacja.
Uwaga: minimalny obrót oznacza w tej samej kolejności, co w słowniku angielskim - „dwor” jest przed „słowem”, ponieważ d jest przed w.
EDYCJA: konstrukcja tablicy sufiksów przyjmuje O (N)
OSTATNIA EDYCJA: Myślę, że znalazłem rozwiązanie !!! Co jeśli po prostu scalę dwa ciągi? Więc jeśli ciąg ma postać „alabala”, nowy ciąg nazwałby mnie „alabalaalabala”, a teraz po prostu skonstruowałbym tablicę sufiksów tego (w O (2n) = O (n)) i otrzymałbym pierwszy przyrostek? Myślę, że to może być właściwe. Co myślisz? Dziękuję Ci!