eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingTablica int i usuwanie duplikatów › Re: Tablica int i usuwanie duplikatów
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net
    !1.eu.feeder.erje.net!news.roellig-ltd.de!open-news-network.org!border2.nntp.am
    s1.giganews.com!nntp.giganews.com!newsfeed.neostrada.pl!unt-exc-02.news.neostra
    da.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    From: szemrany <s...@o...off>
    Subject: Re: Tablica int i usuwanie duplikatów
    Newsgroups: pl.comp.programming
    User-Agent: 40tude_Dialog/2.0.15.84
    MIME-Version: 1.0
    Content-Type: text/plain; charset="utf-8"
    Content-Transfer-Encoding: 8bit
    Sender: n...@p...no
    References: <q1dqtorkbx55$.vtwhsmj03gkt$.dlg@40tude.net>
    <mtbd2l$9d5$1@node2.news.atman.pl>
    <5...@g...com>
    <mtbvi8$1ro$1@node1.news.atman.pl> <mtc22e$4hh$1@node1.news.atman.pl>
    <mtc3ip$vok$1@node2.news.atman.pl> <mtc56n$7m6$1@node1.news.atman.pl>
    <b...@g...com>
    <mtcaik$d1l$1@node1.news.atman.pl> <mtckeb$nhk$1@node1.news.atman.pl>
    <mtcmsn$j1k$1@node2.news.atman.pl> <mtcq5e$tdl$1@node1.news.atman.pl>
    <1...@g...com>
    <mtfe8g$7cu$1@node2.news.atman.pl>
    <a...@g...com>
    <1...@4...net>
    <mthm8f$p6g$1@node1.news.atman.pl>
    <1...@4...net>
    <mthp48$epf$1@node2.news.atman.pl>
    <1amtzmln34a1o$.kdovd8ebh5p5$.dlg@40tude.net>
    <mticic$1e6$1@node2.news.atman.pl>
    Date: Sat, 19 Sep 2015 11:34:55 +0200
    Message-ID: <k...@4...net>
    Lines: 378
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 89-71-60-55.dynamic.chello.pl
    X-Trace: 1442655296 unt-rea-b-01.news.neostrada.pl 8375 89.71.60.55:5004
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:208356
    [ ukryj 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ę"

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: