Potrzebuję reprezentować zestaw i zaczynam pracować z Data.Set. Widzę, że naprawdę nic nie trzeba robić - singleton
, union
, intersection
itp. Są po prostu tam. Lubię to. Mogę wyrazić "co", a nie "jak". Ale mój wewnętrzny programator C jest niewygodny. Istnieje wiele sposobów implementacji zestawu (drzewo binarne, tablica hasłowa, tablica logiczna itp.). Czy naprawdę mogę zaufać Data.Set, aby wybrać najlepszy? Czy mogę w jakiś sposób go poprowadzić, czy po prostu poddam się jego (przyznaję, prawdopodobnie wyższemu) osądowi?Data.Set: czy zawsze wie najlepiej?
Odpowiedz
Data.Set
nie ma wewnętrznej inteligencji (po prostu zobacz the source!). To tylko zrównoważone drzewo lub uporządkowane elementy. Możesz spojrzeć na hackage dla wielu innych struktur zestawów i zestawów o różnych parametrach wydajności. Na przykład zobacz unordered-containers (HashSet), HashTables i bloomfilter.
OK, dzięki. Sądzę, że następnym pytaniem jest - czy istnieje lub kiedykolwiek będzie "DataSet", któremu można zaufać, że dokonał niektórych wyborów dotyczących implementacji dla osoby dzwoniącej? tj. gdy powiedziano mu, że domena to tylko [1..8], to może on po prostu użyć bajtu? – gcbenison
Widząc wszystkie wartości w pudełkach, nie będziesz w stanie użyć bajtu. Jak wdrożysz to w Haskell? Sądzę, że sprawdziłbyś wartość danych wejściowych i ustawiłeś bit w swoim 'Word8' ręcznie, a następnie musiałbyś przydzielić wartość w ramkach dla każdego wyszukiwania? Nie brzmi dla mnie jak wygrana w wydajności. –
Wygląda na to, że wciąż można dokonać porównania równości bez żadnych przydziałów, a być może związków i przecięć z jednym przydziałem Word8. – gcbenison
Ogólne Data.Set
używa zrównoważonego drzewa binarnego. Jeśli masz zestawy liczb całkowitych lub bitowych, będziesz potrzebował Data.IntSet
, która używa Patricii próbuje.
Obie implementacje zostały wyostrzone przez lat w konkurencji, aby uzyskać najlepszą wydajność z Haskell.
Poddaj się Dorothy!
W połączeniu z odpowiedzią Thomasa razem stanowią doskonałą odpowiedź. 'Data.Set' jest świetny, ma wspaniały interfejs i jest wystarczająco szybki w większości przypadków (znacznie lepiej niż ktokolwiek z nas mógłby ręcznie), ale (jak wszystko) nie rozwiąże każdego problemu optymalnie. Nie przejmuj się tym, dopóki nie musisz; kiedy to zrobisz, sprawdź niektóre inne biblioteki. – luqui
@luqui Myślę, że gdy masz zestawy liczb całkowitych, warto przejść od razu do 'Data.IntSet'. –
- 1. Czy Haskell zawsze wie, "wróć", aby zadzwonić?
- 2. Android: Czy ktoś wie, jak przechwytywać wideo?
- 3. Czy ktoś wie, czym jest "Quantum Computing"?
- 4. Czy ktoś wie, darmowy kompilator dla Delphi?
- 5. Czy ktoś wie o bibliotece tekstowej java2d?
- 6. Czy ktoś wie o internetowym IDE?
- 7. Jak najlepiej sprawdzać, czy obiekt został zmieniony?
- 8. Jak najlepiej sprawdzić, czy plik cookie istnieje?
- 9. GDI został przyspieszony. Czy ktoś wie, kiedy to się stało?
- 10. Wstaw do Data.Set i sprawdź, czy element istnieje w tym samym czasie.
- 11. Czy stdio zawsze ustawia errno?
- 12. Czy executePendingTransactions() jest zawsze konieczne?
- 13. Czy jQuery zawsze zwraca tablicę?
- 14. Czy EOF zawsze jest ujemny?
- 15. Czy powinienem zawsze wywoływać Page.IsValid?
- 16. Przykład sieci neuronowej Kod źródłowy (najlepiej Python)
- 17. Czy ktoś wie, co oznacza komunikat ShellHook HSHELL_RUDEAPPACTIVATED?
- 18. Czy ktoś wie gdzie znaleźć znaczniki kodów wyjścia konsoli NUnit?
- 19. Czy ktoś wie o dobrych tutoriali dla biblioteki Slick 2D?
- 20. Ktoś wie, czy na iPhonie jest 5-gwiazdkowy komponent oceny?
- 21. Czy ktoś wie, co to jest gvfsd-http?
- 22. Czy ktoś wie o bibliotece kodów QR C/C++ Unix?
- 23. Czy Jquery wie, kiedy skończy się mój animowany gif?
- 24. Czy ktoś wie, gdzie można uzyskać rzeczywisty kod PVP Cray?
- 25. Czy ktoś wie o frameworkach/bibliotekach przepływu pracy w Pythonie?
- 26. Czy ktoś wie o narzędziu do analizy CSS?
- 27. Czy ktoś wie, które metody są nieaktualne w IOS 6.0?
- 28. Czy ktoś wie, że TikZ nie jest odpowiednikiem TeX-a?
- 29. Czy ktoś wie, jak B-Tree ma swoją nazwę?
- 30. Czy ktoś wie, jak korzystać z PagerTitleStrip w Androidzie
Idź z opcją 2, szczególnie jeśli jest przeznaczona do użycia w kodzie produkcyjnym. – Shredderroy