🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27187

Re: Python a hashmapa

#27187
From: Jan Kaliszewski
Date: Sat, 09 Jan 2010 21:28
49 lines
3311 bytes
wodzik <wodzik@noreply.com> napisał:

> On 2010-01-09 13:03, Stachu 'Dozzie' K. wrote:
>>> czyli rozumiem, że operacje wstawiania - wyszukiwania mają złożoność
>>> obliczeniową równą 1?
>>
>> A widziałeś kiedyś strukturę spełniającą te kryteria? Z wyjątkiem
>> tablicy indeksowanej liczbami.
>
> Oczywiście że widziałem. Nazywa się to hashmapa. Działa to tak, że  
> rezerwujemy sobie pamięć, a potem na podstawie jakiejś funkcji  
> mieszającej określamy gdzie dany element powinien znajdować się w  
> tablicy i tam go wstawiamy. Jeśli dla różnych obiektów mamy taki sam  
> adres wyszukujemy mu nowy, albo robimy listę w tym miejscu. Tyle z  
> szkoły.

"Hashmapa" to jakiś potworek językowy. Po polsku na ogół mówimy o tablicy  
mieszającej (lub haszującej), bądź ogólniej o tablicy asocjacyjnej lub  
słowniku -- ang. dictionary, w Pythonie po prostu dict. Przy czym  
pythonowa implementacja słownika należy do jednej z najlepiej wykonanych i  
zoptymalizowanych -- nie dziwne, skoro Python wewnętrznie używa tej  
struktury prawie na każdym kroku (do obsługi przestrzeni nazw, do  
argumentów nazwanych...).¹

Podobną do słowników strukturą są w Pythonie zbiory (set). Można je  
traktować jako słowniki z samymi kluczami (bez wartości) + wygodnymi  
metodami do typowych operacji na zbiorach.

> Ale link który podał Rob Wolfe chyba wyjaśnia sprawę dostatecznie. Przy  
> zastosowaniu słownika średnia złożoność pobrania elementu wynosi O(1).  
> Teraz pozostaje mi tylko napisać funkcje która w jakiś sensowny sposób  
> będzie tworzyła klucz na podstawie mojej klasy.

A według jakiego kryterium określasz "tożsamość" elementów w  
dotychczasowym rozwiązaniu opartym na listach? Bo jeżeli wg tożsamości  
(id) samego obiektu (lub równości, gdy nie jest specjalnie definiowana, co  
również oznacza test tożsamości), to prawdopodobnie nie musisz żadnej  
specjalnej funkcji pisać -- zastąp listy zbiorami i już [test ,,x in set''  
daje średnio O(1)].

Pozdr.
*j

¹ Ciekawy artykuł na ten temat można przeczytać w książce "Piękny k0d.  
Tajemnice mistrzów programowania" (tyt. oryg. "Beatiful Code: Leading  
Programmers Explain How They Think") [wyd. Helion 2008]

-- 
Jan Kaliszewski (zuo)
Technical Details
Message-ID: <op.u6aa9spdfvx12t@jerzozwiesz.home.aster.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!plix.pl!newsfeed1.plix.pl!nntp.aster.pl!newsread.aster.pl!newsread1.aster.pl!not-for-mail
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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!plix.pl!newsfeed1.plix.pl!nntp.aster.pl!newsread.aster.pl!newsread1.aster.pl!not-for-mail
From: "Jan Kaliszewski" <zuo@chopin.edu.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: Python a hashmapa
Date: Sat, 09 Jan 2010 22:28:30 +0100
Organization: Aster Sp. z o.o.
Lines: 49
Message-ID: <op.u6aa9spdfvx12t@jerzozwiesz.home.aster.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>
NNTP-Posting-Host: 62.121.72.3
Mime-Version: 1.0
X-Trace: newsread.aster.pl 1263072653 5471 212.76.33.132 (9 Jan 2010 21:30:53 GMT)
X-Complaints-To: abuse@aster.pl
NNTP-Posting-Date: Sat, 9 Jan 2010 23:22:00 +0000 (UTC)
User-Agent: Opera Mail/9.64 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit