Co wiadomo na temat struktur danych, które mogą utrzymywać sekwencję elementów podlegających następującym dwóm operacjom?
- Naciśnij (x): dodaj x na końcu sekwencji i zwróć identyfikator jej pozycji w sekwencji
- Wyodrębnij (S): biorąc pod uwagę nieuporządkowany zestaw identyfikatorów, usuń elementy z tych pozycji z sekwencji i zwróć listę usuniętych elementów w kolejności sekwencji
Jeśli chcesz, możesz myśleć o tym jak o stosie lub kolejce z operacją podziału, która dzieli ją na dwa stosy: operacja wyodrębniania może być wykorzystana do wykonania operacji pop lub dequeue, a wyodrębniona sekwencja elementów może być również umieszczona z powrotem do innego stosu lub kolejki.
Co już wiem: można zachować sekwencję jako podwójnie połączoną listę, gdzie każdy identyfikator jest tylko wskaźnikiem do węzła listy połączonych, a każdy węzeł przechowuje również numer pozycji, który umożliwia szybkie porównanie między pozycjami dwóch niepowiązanych elementów w sekwencji. Aktualizacja numerów pozycji nie jest trudna w miarę postępu struktury danych, dzięki czemu wszystkie są dodatnimi liczbami całkowitymi o maksymalnej wartości , gdzie n jest bieżącą liczbą pozycji na liście. Przy tej strukturze danych jedyną trudną częścią operacji wyodrębniania jest sortowanie wyodrębnionych elementów według ich numerów pozycji. Wyodrębnienie k elementów zajmuje O ( k √oczekiwany losowy czas przy użyciu algorytmu sortowania liczb całkowitych Hana i Thorupa z FOCS 2002, na przykład, a operacja wypychania zajmuje stały czas.
Czego nie wiem: czy można poradzić sobie z ekstraktem w czasie i wcisnąć w czasie stałym? Czy jest literatura na ten temat? Czy to jest tak trudne jak sortowanie liczb całkowitych?
Motywacja: jest to podstawowy krok potrzebny do zamówienia elementów w algorytmie szeregowania Coffmana-Grahama, który ma również zastosowania w rysowaniu wykresów. Trudną częścią Coffmana-Grahama jest uporządkowanie leksykograficzne topologiczne. Można tego dokonać utrzymując dla każdego innego stopnia sekwencję wierzchołków z tym stopniem w podgrodzie indukowanym przez pozostałe wierzchołki. Następnie kilkakrotnie usuń pierwszy wierzchołek z sekwencji wierzchołków zerowo niezależnych i dodaj go do porządku topologicznego; wyodrębnij sąsiadów v ze stopni, do których wcześniej należeli, i wypchnij ich na sekwencję o kolejny mniejszy stopień. Więc O ( k ) czas na operacje wyodrębniania w tej strukturze danych prowadziłby do liniowej implementacji algorytmu Coffmana-Grahama.
Ponieważ pierwotnie pytałem o to, znalazłem artykuł Sethiego z 1976 r. , Który pozwala na implementację algorytmu Coffmana-Grahama w czasie liniowym, i umieściłem go w moim artykule w Wikipedii na temat algorytmu Coffmana-Grahama , więc oryginalna motywacja jest mniej znacząca. Nadal jestem ciekawa, jaka jest odpowiedź.
źródło
Odpowiedzi:
Myślę, że jest to co najmniej tak trudne, jak sortowanie zbioru liczb całkowitych z „losową wskazówką” wielomianu wielkości w n . Przez losową poradę rozumiem, że dla dowolnego n istnieje stały rozkład D n (w zależności tylko od n ) na ciągi wielkości poli ( n ), a nasz algorytm (modelowany przez maszynę RAM) ma losowy dostęp do pojedynczej próbki z D n . D n to (losowa) struktura danych po wypchnięciu [ n ]S⊆[n] n n Dn n n Dn Dn [n] w kolejności, wraz z tabelą skrótów, która odwzorowuje liczby całkowite na identyfikatory w oczekiwanym czasie .O(1)
Biorąc pod uwagę tę konfigurację, na przykład problemu z sortowaniem liczb całkowitych, możemy wydać ekstrakt ( S ) (w rzeczywistości potrzebujemy identyfikatorów S, ale to mapowanie może być wykonane w czasie O ( 1 ) na element przy użyciu skrótu tabela, która jest częścią porady), a dane wejściowe zostaną posortowane według czasu potrzebnego do wykonania wypakowania.S⊆[n] S S O(1)
Komunikat jest taki, że o ile niektóre „wolne” informacje dodatkowe, które zależą tylko od górnej granicy liczb całkowitych, mogą ułatwić sortowanie liczb całkowitych, wyodrębnienie jest tak trudne jak sortowanie liczb całkowitych.
Czy to sugeruje związek między dwoma problemami bez dziwnego modelu? Czy to pojęcie losowej porady jest czymś znanym? Jest to trochę jak protokół MA, ale wiadomość Merlina nie może zależeć od danych wejściowych i zależy nam na czasie działania Artura.
źródło