Article View: pl.comp.lang.python
Article #27203Re: Python a hashmapa
From: Sebastian Kaliszewski
Date: Fri, 15 Jan 2010 11:48
Date: Fri, 15 Jan 2010 11:48
107 lines
5701 bytes
5701 bytes
Łukasz Rekucki wrote: >> Co jest w ogólności kłamstwem. Choć w realnych sytuacjach jest OK (choć >> w realnych sytuacjach można by formalnie poprawnie napisać że dostęp do >> dowolnego elementu do realnej listy to O(1) tylko stała czasowa duża :) >> (Pamięć komputerów jest ograniczona przez stałą, przeszukanie jest >> jest więc formalnie O(1) -- oczywiście mało to przydatne do >> czegokolwiek, ale formalnie jest OK. :) ) > Nie, nie można by, bo zależy on od ilości elementów w tej liście. I co z tego? Jest zawsze ograniczony z góry przez stałą. Przeczytaj sobie definicję zapisu O(x). > I > nie jest to formalnie ok, bo poprostu liczysz zupełnie coś innego. Jest formalnie ok. Mało przydatne, ale OK. > >> Wszystkie te O(1) działają tylko i wyłącznie dzięki temu, że pamięć jest >> skończona, więc długość reprezentacji dowolnego indeksu / hasha itp jest >> twardo ograniczona z góry niewielką stałą (w dzisiejszych czasach stałą >> to jest 64). > Prawię, 2**64, to tylko 1TB Ależ skąd. To 16EB -- Pomylileś się "jedynie" 2**24 krotnie. >- w linux'ie spokojnie możesz mieć 4TB > pamięci wirtualnej. Nie szkodzi. To i tak 2**22 razy mniej niż limit. >> Bo tak na prawdę to zarówno odwołanie do tablicy hashującej czy nawet do >> dowlonej pozycji w zwykłej tablicy to ma koszt nie O(1) tylko O(log n). >> Bo nie ma cudów i zapis dowolnego indeksu do struktury długości n musi >> mieć zająć log n. A że sięgnięcie pod dany indeks w większości >> przypadków wymaga "obejrzenia" całości jego zapisu to jest ograniczone z >> dołu przez O(log n). > > Niby masz rację, ale po drodze zmieniasz model obliczeń. Długość > liczby na takim przyziemnym komputerze jak mój jest stała, a procesor > wykonuję na niej operację w jednym albo kilku taktach - niezależnie od > jej wartości. Długość struktury zupełnie go jakoś nie obchodzi. Oczywiście, że go obchodzi. Dłuższa się nie zmieści. To dosyć kluczowe ograniczenie. > >> W dzisiejszych komputerach korzystamy z tego, że podstawa tego log jest >> duża (2**32 lub 2**64) i dlatego w praktyce zwija się to do O(1). > NIE, NIE, NIE - Dla dowolnego C i dowolnej funkcji stałej g, Istnieje > n, t. że log_C(n) > g(n), więc nigdy log_C(n) nie będzie O(1). Nigdy. > To są dwie różne klasy funkcji. > > Powodem nie jest jakieś *magiczne* oszacowanie, czy zwijanie się, > tylko model obliczeń. Poprostu mnie nie interesuję ile kosztują > operację na liczbach! > > Mam: > 1) pamięć RAM o stałym czasie dostępu > 2) Maszynę, która umie wykonywać arytmetykę na liczbach w czasie > stałym. > I pytam się jaka jest zależność ilości takich operacji od ilości > danych? > > To nie jest model uniwersalny, ale się tutaj sprawdza. To się robi trochę inaczej. Przyjmuje się nie jakąś jednostkę czasu, tylko liczbę operacji określonych typów -- wtedy się zgadza i nie zależy od wielkości pamięci. >>> Oczywiście można czepiać się, że czasami w przypadku kilku elementów o 2 >>> takich samych kluczach będzie trzeba wykonać jakąś dodatkową operacje, >>> jednak w porównaniu z złożonością liniową O(n) dla większej ilości >>> elementów jest to na tyle nieistotne, że przyjmuje się, że złożoność >>> jest O(1), a nie np. O(1.3) >> Jak już inni napisali, O(1) == O(1.3) == O(103453123) >> >> Nawet i przy rozsądnych założeniach można mieć pecha i dostać O(n). >> >> To O(1) o jakim pisze Cormen to koszt zamortyzowany > > Nie. Co ma wyszukanie do amortyzacji! To, że łączny koszt wyszukań wszystkich elementów jest ograniczony z góry liniowo. > Wikipedia to może nie jest > najlepsze źródło, ale tu akurat jest ok: > Nie musisz mnie tego uczyć. Zamortyzowany znaczy średni po wszystkich wyszukiwaniach. > Sensowne założenia ~ średni przypadek. Ale stwierdzenie stały koszt zamortyzowany jest lepsze niż średni koszt stały, bo nie bardzo wiadomo co to czas średni -- średnia po czym liczona? pzdr \SK -- "Never underestimate the power of human stupidity" -- L. Lang -- http://www.tajga.org -- (some photos from my travels)
Technical Details
Message-ID:
<28u527-5oa.ln1@bozon.softax.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!news.belwue.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!bozon.softax.pl!newsReferences:
<hi9a48$c1b$1@zeus.man.szczecin.pl> <20100109102348.d563af8e.natural-born-killer@dontmailme.com> <hi9nmc$iqv$1@zeus.man.szczecin.pl> <hi9rbf$1ke$2@solani.org> <hiapsg$4mg$1@zeus.man.szczecin.pl> <hiavmd$i2o$1@solani.org> <hib2ff$96o$1@zeus.man.szczecin.pl> <ag6127-2bm.ln1@bozon.softax.pl> <83ed19bf-352f-434d-9079-202e4e20225c@b2g2000yqi.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!news.belwue.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!bozon.softax.pl!news From: Sebastian Kaliszewski <s.bez_spamu@remove.this.informa.and.that.pl> Newsgroups: pl.comp.lang.python Subject: Re: Python a hashmapa Date: Fri, 15 Jan 2010 12:48:23 +0100 Organization: TP - http://www.tp.pl/ Lines: 107 Message-ID: <28u527-5oa.ln1@bozon.softax.pl> References: <hi9a48$c1b$1@zeus.man.szczecin.pl> <20100109102348.d563af8e.natural-born-killer@dontmailme.com> <hi9nmc$iqv$1@zeus.man.szczecin.pl> <hi9rbf$1ke$2@solani.org> <hiapsg$4mg$1@zeus.man.szczecin.pl> <hiavmd$i2o$1@solani.org> <hib2ff$96o$1@zeus.man.szczecin.pl> <ag6127-2bm.ln1@bozon.softax.pl> <83ed19bf-352f-434d-9079-202e4e20225c@b2g2000yqi.googlegroups.com> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: atlantis.news.neostrada.pl 1263553353 21938 83.18.189.42 (15 Jan 2010 11:02:33 GMT) X-Complaints-To: usenet@news.neostrada.pl NNTP-Posting-Date: Fri, 15 Jan 2010 11:02:33 +0000 (UTC) User-Agent: Thunderbird 2.0.0.23 (X11/20090817) In-Reply-To: <83ed19bf-352f-434d-9079-202e4e20225c@b2g2000yqi.googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit