eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingTablica int i usuwanie duplikatówRe: Tablica int i usuwanie duplikatów
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neost
    rada.pl!unt-spo-a-01.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>
    <mtav82$r76$1@node2.news.atman.pl>
    <a...@n...v.pl>
    <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>
    Date: Fri, 18 Sep 2015 22:50:00 +0200
    Message-ID: <1amtzmln34a1o$.kdovd8ebh5p5$.dlg@40tude.net>
    Lines: 127
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 89-71-60-55.dynamic.chello.pl
    X-Trace: 1442609400 unt-rea-a-02.news.neostrada.pl 27516 89.71.60.55:1508
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:208354
    [ ukryj nagłówki ]

    On Fri, 18 Sep 2015 21:36:40 +0200, bartekltg wrote:

    >> Tak, tylko, że Delphi miało inne założenia produkcyjne i nie ma milionów
    >
    > Założenia miało te same. A nawet bardziej nastawione na biblioteki,
    > bo było to tzw RAD. Miałeś szbyko budować aplikacje z klocków,
    > nie pisać własny standardowy kontener.

    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.
    Te klocki o których piszesz są na wyższym poziomie niż struktury danych i
    algorytmy, to moduły typu system raportów, warstwa DAL, kontrolki wizualne
    itd.

    > > nie ma milionów
    >> kontenerów jak C++. Muszę część rzeczy wydłubać sam.
    >
    > Po prostu nie wierzę.

    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.

    > 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
    co? Żeby robić szybką listę buttonów na formie czy ...szybko czekać na
    odpowiedź serwera SQL? ;-)

    > Zresztą, sam w poprzednim poście znalazłeś TDictionary,
    > odpowiednik mapy, i to w wersja która wygląda na szablonową.
    > Pewnie obok jest i zwykły zbiór, i tablica hashuhjąca.
    > TDictionary wystarczy.

    TDictionary<K, V> jest od 2009 roku w standardzie, jest generyczne (czy to
    odpowiednik szablonów to nie wiem, 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

    oraz starsze:
    THashedStringList - lista typu key-value, gdzie hash jest liczony w ten
    sposób:

    function TStringHash.HashOf(const Key: string): Cardinal;
    var
    I: Integer;
    begin
    Result := 0;
    for I := 0 to Key.Length - 1 do
    Result := ((Result shl 2) or (Result shr (SizeOf(Result) * 8 - 2))) xor
    Ord(Key.Chars[I]);
    end;

    nie potrafię ocenić ile to warte.

    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.

    I to WSZYSTKO w standardzie.
    Uwierzysz, że nia ma nawet prostej linked listy? Wszak to ją się pisze na 3
    zajęciach z programowania, także kiedyś w pascalu. Nie wiem dlaczego tak
    jest, ale widać rynek tego nie potrzebował.

    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

    ale jeszcze nie zdążyłem go produkcyjnie użyć, bo już raz się wpakowałem w
    tego typu projekt, który potem zdechł i miałem dużo kłopotu z wymiksowaniem
    się z niego. Teraz dmucham na zimne.

    >> Nie chcę używać dziesiątek obcych bibliotek, bo to co teraz robię pakuję do
    >> swojego frejmworka do użycia także w przyszłości, więc nie chcę mieć zbyt
    >> wielu ogonów.
    >
    > 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ę.
    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. 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

    >> Stąd potrzebuję algorytmów niskopoziomowych, które sobie w tymże module
    >> zaimplementuję. Jeśli okaże się, że użycie TDictionary da jakiś zysk na
    >
    > Przecież ni o tym pisałem.
    > Wewnętrz algorytmu wyznaczajacego duplikaty używasz dołego
    > TDictionary tak, jak w praktycznie wszystkich opisanych tu
    > sposobach.
    >
    >> dużych tablicach względem algorytmu naiwnego z pętlami to tej wersji też
    >> będę używał.
    >
    > Da. A jeszcze szybsze byłoby zrobienie kopii i sortowanie ;-)

    Taką wersję też mam w roadmapie ;-)

    --
    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: