Article View: pl.comp.lang.python
Article #27202Re: Python a hashmapa
From: Łukasz Rekucki
Date: Thu, 14 Jan 2010 16:31
Date: Thu, 14 Jan 2010 16:31
73 lines
4879 bytes
4879 bytes
> 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 nie jest to formalnie ok, bo poprostu liczysz zupełnie coś innego. > > 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 - w linux'ie spokojnie możesz mieć 4TB pamięci wirtualnej. > 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. > 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. > > 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! Wikipedia to może nie jest najlepsze źródło, ale tu akurat jest ok: http://en.wikipedia.org/wiki/Best,_worst_and_average_case Sensowne założenia ~ średni przypadek. > > pzdr > \SK > -- > "Never underestimate the power of human stupidity" -- L. Lang > --http://www.tajga.org-- (some photos from my travels)
Technical Details
Message-ID:
<83ed19bf-352f-434d-9079-202e4e20225c@b2g2000yqi.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.com!postnews.google.com!b2g2000yqi.googlegroups.com!not-for-mailReferences:
<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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.com!postnews.google.com!b2g2000yqi.googlegroups.com!not-for-mail From: Łukasz Rekucki <lrekucki@gmail.com> Newsgroups: pl.comp.lang.python Subject: Re: Python a hashmapa Date: Thu, 14 Jan 2010 08:31:42 -0800 (PST) Organization: http://groups.google.com Lines: 92 Message-ID: <83ed19bf-352f-434d-9079-202e4e20225c@b2g2000yqi.googlegroups.com> 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> NNTP-Posting-Host: 212.76.62.207 Mime-Version: 1.0 X-Trace: posting.google.com 1263486702 18645 127.0.0.1 (14 Jan 2010 16:31:42 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 14 Jan 2010 16:31:42 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: b2g2000yqi.googlegroups.com; posting-host=212.76.62.207; posting-account=5fpXZwoAAADF-CUdCuJ-FpYxG8__-wRx User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.64 Safari/532.5,gzip(gfe),gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit