Powiedzmy, że przechodzimy przez wykres i chcemy szybko stwierdzić, czy dany węzeł był widziany wcześniej czy nie. Mamy kilka ustalonych warunków wstępnych.Szybkie wyszukiwanie elementów dla języka funkcyjnego (Haskell)
- węzły oznaczone liczbami wartości 1..n
- wykres jest realizowane z węzłami o listę przylegania
- Każda wartość całkowitą od 1..n występuje na wykresie, który ma wielkość N
Jakieś pomysły na zrobienie tego w czysto funkcjonalny sposób? (Nie dozwolone tabele lub tablice skrótu).
Chcę struktury danych z dwiema funkcjami nad nią pracującymi; add (dodaje napotkaną liczbę całkowitą) i lookup (sprawdza czy liczba całkowita została dodana). Oba powinny korzystnie przyjąć czas (n) zamortyzowany na N powtórzeń.
Czy to możliwe?
Zakładam, że Data.Set da logarytmiczną lub quasi-stałą wydajność na addToSet i member, w przeciwieństwie do oczekiwanej wydajności w czasie stałym z tabelami hash? –
Chris, masz rację. Dane.Wstawianie i wyszukiwanie operacji to O (log n). – namin
Jeśli twoje liczby całkowite są wystarczająco małe dla typu Int, możesz użyć Data.IntSet, czyli zoptymalizowanej wersji Set. – mattiast