-
Data: 2015-09-19 11:34:55
Temat: Re: Tablica int i usuwanie duplikatów
Od: szemrany <s...@o...off> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On Sat, 19 Sep 2015 03:08:27 +0200, bartekltg wrote:
>> Specjalnie nie napisałem założenia projektowe tylko produkcyjne, choć może
>> to też nieszczęśliwe słowo. Chodziło mi o to, że Delphi służy głównie do
>> pisania aplikacji bazodanowych z GUI, a nie wysoko wydajnych aplikacji do
>> przetwarzania danych.
>
>
> Baza danych kojarzy mi się z wysoikowydajnym rpzetwarzaniem danych ;-)
> OK, rozumiem, zę chodziło o korzystanie z niej, nie pisanie.
Aplikacja bazodanowa =/= serwer bazy danych ;-)
>> Kilka lat temu znany tu Sebastian Biały wpadł na sąsiednią grupę delphi, bo
>> coś zrobić w Delphi musiał i pytał m.in. o hash table. Gdy się dowiedział,
>> że nie ma to dostał nomen omen białej gorączki i zbluzgał zarówno samo
>> Delphi jak i kilka postronnych osób ;-) Fakt, że pytał o Delphi 5, które
>> było z poprzedniego wieku. Teraz dodano kilka kontenerów, ale to jest
>> dosłownie KILKA.
>
> Jezusmariamisiek, jak za fortrana łupanego ;]
Ale to jest zrozumiałe, założenia były jakie były i rozwijano w pierwszej
kolejności to co było powszechniej potrzebne. Do tego dochodzi zawierucha
związana z Borlandem, który 10 lat temu odpuścił sobie rozwój Delphi i
skończyło się prawie jego śmiercią. Po kilku latach znalazła i kilku
próbach jego utrzymania, znalazł się w końcu inwestor, firma Embarcadero,
producent narzędzi bazodanowych, który zaczął dość dynamiczny rozwój
zarówno środowiska jak i języka (unicode, x64, generyki, funkcje anonimowe,
bogate RTTI, kompilatory na platformy mobilne i OSX, itd.). Ale to wszystko
jest z dużym opóźnieniem względem świata. Poza tym ceny lecą w kosmos, a
bugi wraz z nimi.
> Ale w sumie te kilka kontenerów to już niezły start.
> Zbiór, mapa, lista, kolejka, stos, kolejka piorytetowa.
> Poza zbiorem wszystko znalazłem. Chyba większy problem
> niż brak kontenerów jest kiepska dokumentacja (albo
> to, że do przyzwoitej nie mogłem się dokopać).
Dokumentacja jest tu:
http://docwiki.embarcadero.com/RADStudio/XE8/en/Main
_Page
np. dla kontenerów podstawowych:
http://docwiki.embarcadero.com/RADStudio/XE8/en/Work
ing_with_Lists
dla generyków:
http://docwiki.embarcadero.com/Libraries/XE8/en/Syst
em.Generics.Collections
> Porządnego drzewa (takeigo, by mieć dostęp do wierzchołków
> i po zmianie, w tym balansowaniu, moc poprawić jakeij informacje,
> zależne od poddrzew - przydatna sprawa czasem) nie ma
> i w bibliotece standardowej c++.
Drzewa to jeden z tematów mniej przeze mnie rozpoznanych ;-)
>>> Tak, pascal jest mentalnie związany z uczeniem programowania,
>>> i każdy nowy programista koniecnzie musi pisać własnego
>>> qsorta i drzewo AVL, ale to szybko przechodzi, a jeśli
>>> język jest więcej niż parę osób używany komenrcyjnie (a Delphi
>>> jak mówisz, nadal jest, a jakis czas temu było bardzo poważnie
>>> używane), na pewno biblioteki są.
>>
>> Mało, malutko, jeszcze mniej... bo 90% delphiarzy nie potrzebuje. Bo i po
>
>
> Potrzebują, potrzebują, przeceiż to tylko oczko wyżęj niż
> sortowanie. Tylko nie wiedzą czego naprawdę potrzebują
> i robią dookoła. Zerknij na pierwsza odpowiedź
> http://stackoverflow.com/questions/13765606/associat
ive-array-in-delphi-array-with-string-key-is-possibl
e
> https://www.prestwood.com/ASPSuite/KB/Document_View.
asp?QID=101517
> Object Pascal doesn't have a native associative array, but you can use a
> TStringList the same way.
>
> I zaraz ktoś będzie trzytmał inty jako stringi;)
No niestety, świadomość algorytmiki wśród delphiarzy jest nikła... sam
staram się wyjść poza schemat, ale to wiąże się z ...dłubaniem ;-)
A paradoksalnie to właśnie twórca Pascala napisał wszak klasyczną pozycję o
algorytmach i strukturach danych :-)
>> co? Żeby robić szybką listę buttonów na formie czy ...szybko czekać na
>> odpowiedź serwera SQL? ;-)
>
> Nie zauważyłeś, że moc obliczeniowa wzrosła niemiłosiernie od czasów
> pierwszych interfejdsów graficznych, a ich responsywność
> nadal bywa neizadowalająca? ;-)
Tak, tak... i znam dobrze tego przyczyny. Czasem zresztą biorę udział w
poprawianiu takich aplikacji i nagle się okazuje, że da się prosto
zniwelować zamulenie GUI do zera :-)
>> TDictionary<K, V> jest od 2009 roku w standardzie, jest generyczne (czy to
>> odpowiednik szablonów to nie wiem,
>
> To praktycznie synonimy. Pewnie jakaś subtelna różnica
> jest, typu, zę sablony to rodzaj programowania generycznego,
> ale mało to istotne.
>
>> jest podobne do tego co ma C#:
>> http://interactiveasp.net/blogs/spgilmore/archive/20
09/12/23/using-generics-in-delphi.aspx
> .
>> Obok, rzeczywiście, jest jeszcze kilka:
>> TList<T> - oparty o array of T
>> TThreadList<T> - to samo tylko thread safe
>> TQueue<T> - oparte o array of T
>> TThreadedQueue<T> - j.w. thread safe
>> TStack<T> - oparte o array of T
>
> Hmm, wygląda na to, zę nie zrozumiałęm, myślaęłm, zę 'piszesz tablicę
> hashującą' na bazie Tdictionary, a to on sam jest tablicą hashującą
> (a nie drzewem zrównoważonym).
> http://delphi.about.com/od/beginners/a/using-t-dicti
onary-hash-tables-in-delphi.htm
No właśnie tu miałem lekki dysonans, bo nie mogłem zrozumieć co do mnie
rozmawiasz z tym Dictionary i przyjałem, że m za głupi ;-)
A wszak pisałem kilka postów wyżej:
"Jeszcze zrobię werję z Hash Table, która jest zaimplementowana w
Delphiowym TDictionary (hash jest oparty o algorytm Jenkinsa)."
>> oraz starsze:
>> TBucketList - hash lista na pointery oparta o array of array of pointer,
>> gdzie pierwsza tablica zawiera kubełki zbudowane przez proste przesunięcie
>> bitów w prawo, a druga zawiera już wartości dla konkretnego kubełka.
>
> O, i z tego co czytem, to jest odpowiednik std::set.
> http://stackoverflow.com/questions/547879/how-to-jud
ge-number-of-buckets-for-tbucketlist
> "Aside from that, TBucketList is just an ordinary hash table like you
> learned about in your data-structure class."
>
> I zaraz wspomina o TIntegerBucketList. Super, nie musisz bawić
> się wskaźnikami, od razu ejst to, co trzeba.
Hmm... czyli tego mógłbym użyć w algorytmie w którym wspominaliście o set?
>> I to WSZYSTKO w standardzie.
>> Uwierzysz, że nia ma nawet prostej linked listy? Wszak to ją się pisze na 3
>
> Akurat takiej listy prawie nigdy nie używam ;-)
A ja niedawno chciałem...
>> zajęciach z programowania, także kiedyś w pascalu. Nie wiem dlaczego tak
>> jest, ale widać rynek tego nie potrzebował.
>
> Albo brak takiego wsparcia doprowadził do tego, że język stał
> się niszą do robienia interfejsów do bazy danych:(
Uhm... właśnie, a szkoda, bo lubię jego czytelność, która znacznie ułatwia
refaktoring, np. w stosunku do nieszczęsnej składni C++ (no ofense
siplusowcy! ;-)
>> Są co prawda fajne zewnętrzne projekty, a jeden z nich się rozwija od lat
>> poważnie i wygląda na to, że już nie padnie, jest nim Spring for Delphi:
>>
>> https://bitbucket.org/sglienke/spring4d
> Mi się nie udało na szybko nawet doikumentacji znaleźć, żeby
> zobaczyć, co tam jest ;-)
Przecież jest:
https://bitbucket.org/sglienke/spring4d/wiki/Home
i stąd odnośniki.
Poza tym ja już od dawna jako najlepszej dokumentacji używam samych źródeł
oraz źródeł testów jednostkowych ;-) Choć rozumiem, że dla kogoś spoza
świata Object Pascala kod może być trudniejszy do czytania, tak jak dla
mnie potworki C++ :-P
>>> Przejdź na ciemną stronę.
>>> C++, java, nawet python.
>>> Mniej czasu poświeceisz na nowy język niż na pokonywanie
>>> takich problemów. ;]
>>
>> Gdybym zaczynał od zera to pewnie tak bym zrobił, ale mam mnóstwo
>> pracującego kodu już w Delphi i przy nim zostaję.
>
> Ale mówisz o pracującym firmowym kodzie, czy własnych zabawkach?
> Jak to drugie, to aż tyle tego jest?
O pracującym kodzie, a własne zabawki są podbudową tego pracującego kodu
:-)
>> Poza tym C++, Java i Python odpadają, bo ja potrzebuję w dużej mierze pisać
>> aplikację okienkowe pod Windows, a żaden z nich nie jest konkurencyjny w
>> tym aspekcie dla Delphi.
>
> Jasne, visual studio czy QT ma nieco inną filozofię okienkowania, ale
> zaraz, za czasów borlanda był c++ builder. Bawiłęm się inm zaraz po tym,
> jak bawiełm sie delphi. I był praktycznie identyczny (całę VCL było).
> Google twierdzi, że Embarcadero też wypuszcza tę linię kompilatórów.
No tak, tu mnie masz... Ale gdybym jednak się już miał zajmować czymś innym
to nie będzie to na pewno C++... nie lubię tej skomplikowanej składni i
asemblerowej niskopoziomowości. Ale z ciekawości poszukam kiedyś czy są w
nim te wszystkie struktury dostępne o jakich piszecie.
Chyba, że ktoś na tej grupie to wie i się podzieli?
>> Zerkam na C# i czekam co będzie teraz z
>> Microsoftem i jego nowymi pomysłami. Otwarcie źródeł .NETa jest dobrym
>> początkiem:
>> https://github.com/Microsoft/dotnet
>
> "C# to java, tylko lepiej zaprojektowana" jak mawiają złośliwi;-)
To chyba zaleta, że lepiej zaprojektowana? :-)
Btw wiesz, że C# zaprojektował twórca Delphi, którego MS podkupił pod
Borlanda? I ideologicznie C# jest bardzo bliski Delphi, łatwo się
przerzucić.
> Trochę wyników opisywanych algorytmów.
>
> http://pastebin.com/Bd53Qj2e
Za kod dzięki, prześledzę uważnie.
> cztery wersje, z hashmapą, ze zbiorem na drzewie, z hashmapą,
> ale wstepnie wypelnioną i opróżnianą, oraz wersja naiwna.
> Do tego wersja z sortowaniem, która biła na głowę wszystko;-)
>
> Dalej w kodzie nie ma nic ciekawego a jest brzydki:]
>
> M.M jednak miał niezłą intuicję, algorytm naiwny trzyma się jako
> tako do 1000 liczb! Przynajmniej w porównaniu do kontenerowych,
> w stosunku do sortowania to przebija już dla 10.
>
>
> Sortowanie diała tak dobrze, że dorzuciłem gdzieś wpominaną wersję,
> gdzie kopiuję tablice, sortuję, wyszukuję w niej przetwarzanego
> elementu i indeksu tego elementu używam na tablicy 'czy już było'.
> Szybsze, ale nie tak jak samo sortowanie i 'unique'.
>
> Czy gdzieś nie ma błędów, nie wiem, specjalnie mocno nie testowałem ;-)
>
> pzdr
> bartekltg
>
>
>
> hashmapa budowana
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 1.35577e-06s
> 100 zajelo 2.10569e-05s
> 1000 zajelo 0.000194975s
> 10000 zajelo 0.00224433s
> 100000 zajelo 0.0317218s
>
> zbior budowany
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 6.0001e-07s
> 100 zajelo 1.06281e-05s
> 1000 zajelo 0.000148967s
> 10000 zajelo 0.002129s
> 100000 zajelo 0.0464341s
>
> hashmapa usuwana
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 1.66747e-06s
> 100 zajelo 1.94978e-05s
> 1000 zajelo 0.00021605s
> 10000 zajelo 0.00233336s
> 100000 zajelo 0.0327335s
>
> naiwne n^2
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 6.37173e-08s
> 100 zajelo 2.99953e-06s
> 1000 zajelo 0.000201813s
> 10000 zajelo 0.0190117s
> 100000 zajelo 2.0126s
>
> sortowanie
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 1 11 12 55 56 89 457
> szybkość
> 10 zajelo 5.71213e-08s
> 100 zajelo 8.9025e-07s
> 1000 zajelo 1.22392e-05s
> 10000 zajelo 0.000193209s
> 100000 zajelo 0.00364856s
>
> sortowanie stab
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 2.15298e-07s
> 100 zajelo 4.51064e-06s
> 1000 zajelo 8.12086e-05s
> 10000 zajelo 0.00110467s
> 100000 zajelo 0.0156081s
>
> **********************większe tablice, bez naiwnego*************
>
> hashmapa budowana
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 1.206e-06s
> 100 zajelo 2.12195e-05s
> 1000 zajelo 0.00019574s
> 10000 zajelo 0.00224614s
> 100000 zajelo 0.0319085s
> 1000000 zajelo 0.447895s
> 10000000 zajelo 7.09252s
>
> zbior budowany
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 6.55151e-07s
> 100 zajelo 1.02252e-05s
> 1000 zajelo 0.000142235s
> 10000 zajelo 0.00210293s
> 100000 zajelo 0.0458803s
> 1000000 zajelo 0.809938s
> 10000000 zajelo 14.873s
>
> hashmapa usuwana
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 1.7566e-06s
> 100 zajelo 2.02052e-05s
> 1000 zajelo 0.000217613s
> 10000 zajelo 0.00229402s
> 100000 zajelo 0.0311955s
> 1000000 zajelo 0.484313s
> 10000000 zajelo 5.8356s
>
> sortowanie
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 1 11 12 55 56 89 457
> szybkość
> 10 zajelo 5.79164e-08s
> 100 zajelo 8.72629e-07s
> 1000 zajelo 1.14487e-05s
> 10000 zajelo 0.000183957s
> 100000 zajelo 0.00351675s
> 1000000 zajelo 0.0574259s
> 10000000 zajelo 0.73433s
>
> sortowanie stab
> poprawność:
> 12 457 12 457 1 56 89 12 11 11 55 11 11 1 457
> 12 457 1 56 89 11 55
> szybkość
> 10 zajelo 2.14358e-07s
> 100 zajelo 3.83037e-06s
> 1000 zajelo 7.91519e-05s
> 10000 zajelo 0.00108764s
> 100000 zajelo 0.0153062s
> 1000000 zajelo 0.267471s
> 10000000 zajelo 5.37913s
No to mam dane do rozkminy na dłuższe posiedzenie, dzięki :-)
--
howgh
szemrany
"Trzeba z żywymi naprzód iść, po życie sięgać nowe,
a nie w uwiędłych laurów liść z uporem stroić głowę"
Następne wpisy z tego wątku
- 19.09.15 13:35 M.M.
- 19.09.15 13:57 M.M.
- 19.09.15 14:43 szemrany
- 19.09.15 14:50 M.M.
- 19.09.15 15:08 szemrany
- 19.09.15 15:23 M.M.
- 19.09.15 15:44 szemrany
- 19.09.15 18:10 bartekltg
- 19.09.15 18:13 bartekltg
- 19.09.15 18:20 bartekltg
- 19.09.15 18:58 M.M.
- 19.09.15 20:44 bartekltg
- 19.09.15 20:45 slawek
- 19.09.15 20:52 bartekltg
- 19.09.15 21:01 bartekltg
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2025-01-06 Kraków => Business Development Manager - Network and Network Security
- 2025-01-06 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-06 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-06 Lublin => Programista Delphi <=
- 2025-01-06 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-06 śnieg
- 2025-01-05 Żarówka do lampy z czujnikiem ruchu
- 2025-01-05 Rozkręcają się
- 2025-01-04 pozew za naprawę sprzętu na youtube
- 2025-01-04 gasik
- 2025-01-04 13. Raport Totaliztyczny: Powszechna Deklaracja Praw Człowieka Nie Chroni Przed Wyzyskiem Ani Przed Eksploatacją
- 2025-01-04 Zbieranie danych przez www
- 2025-01-04 reverse engineering i dodawanie elementów do istniejących zamkniętych produktów- legalne?
- 2025-01-04 w Nowym Roku 2025r
- 2025-01-04 Warszawa => Specjalista ds. IT - II Linia Wsparcia <=