-
X-Received: by 10.157.8.54 with SMTP id 51mr260598oty.13.1462603693242; Fri, 06 May
2016 23:48:13 -0700 (PDT)
X-Received: by 10.157.8.54 with SMTP id 51mr260598oty.13.1462603693242; Fri, 06 May
2016 23:48:13 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!go
blin3!goblin.stu.neva.ru!news.ripco.com!news.glorb.com!i5no4762936ige.0!news-ou
t.google.com!uv8ni86igb.0!nntp.google.com!i5no4762927ige.0!postnews.google.com!
glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Fri, 6 May 2016 23:48:12 -0700 (PDT)
In-Reply-To: <b...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=178.37.232.66;
posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
NNTP-Posting-Host: 178.37.232.66
References: <6...@g...com>
<b...@g...com>
<5...@g...com>
<b...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <f...@g...com>
Subject: Re: Wyszukiwanie
From: "M.M." <m...@g...com>
Injection-Date: Sat, 07 May 2016 06:48:13 +0000
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:209355
[ ukryj nagłówki ]On Friday, May 6, 2016 at 12:12:14 PM UTC+2, Wojciech Muła wrote:
> On Monday, May 2, 2016 at 8:07:19 AM UTC+2, M.M. wrote:
> > > Po pierwsze zapomnij o wyszukiwaniu interpolacyjnym. Dla
> > > niejednostajnych rozkładów danych jest wolniejsze niż
> > > binarne.
> > Zapominam o dosłownym stosowaniu wyszukiwania interpolacyjnego. Ciekawy
> > jednak jestem jakby działało 'wyszukiwanie adaptatywne' - tę nazwę
> > wymyśliłem w tej chwili. Jaki algorytm mógłby się kryć za wyszukiwaniem
> > adaptatywnym? Byłaby to kombinacja wyszukiwania binarnego i interpolacyjnego.
> > Wyszukiwanie binarne dzieli zbiór (prawie) na pół (N/2,N/2).
> > Interpolacyjne może nawet podzielić zbiór na (N-1,1). Wystarczyłoby dać
> > jakieś ograniczenie M z przedziału np. od 0.1 do 0.9. Następnie
> > zbiór byłby dzielony na ( N*M , N*(1-M) ). Pozostaje tylko ustalić
> > optymalną wartość M. Ilość wyszukiwań dla takiego algorytmu wahałaby się
> > pomiędzy Log2N a Log10N.
>
> No tak, tylko wtedy wchodzą obliczenia zmiennoprzecinkowe i może
> się okazać, że nie będzie szybciej (w czasie, bo asymptotycznie to może :) ).
>
> Pomyśl może o jakiś drzewach samoorganizujących, które nie przechowywałyby
> jednak wszystkich elementów, ale podprzedziały (całe tablice, mówiąc
> obrazowo). Takie drzewo byłoby płytkie, więc nie byłoby dużego narzutu
> na dereferencje wskaźników. I po dojściu do liścia odpalałbyś już jakieś
> wyszukiwanie w tablicy.
Muszę dobrze przeanalizować stosunek wyszukiwań do modyfikacji. W ogóle
drzewa wyszukiwań binarnych mają zarówno dobrą złożoność (pesymistyczną)
wstawiania, usuwania i wyszukiwania.
W pewnym momencie na pewno będę miał bardzo mało modyfikacji i bardzo
dużo wyszukiwania. Wtedy drzewko pewnie będzie opłacało się zamienić na
tablicę. Czy będzie się opłacało zastosować 'adaptatywny podział' zamiast
ciągle dzielić na pół - tego nie wiem, może będzie tak jak napisałeś, że
obliczenia zmiennoprzecinkowe pochłoną potencjalny zysk.
>
> > > Ja bym został przy binarnym, raczej w ogólnym przypadku
> > > szybciej tego nie zrobisz. Masz przy 1 milionie elementów
> > > 20 porównań, naprawdę ciężko to przebić. Ale chętnie
> > > bym się mylił w tym miejscu. :)
> > W ogólnym pewnie się nie mylisz. Ale jakby z każdym wyszukiwaniem
> > coraz lepiej dopasować wartość M, to może dla niektórych przypadków
> > dałoby się zejść do 6 wyszukiwań dla miliona?
>
> Twoje pytanie zainspirowało mnie do mieszanego podejścia
> wyszukiwania binarnego i liniowego. Jak w binarnym dochodzimy
> do wąskiego przedziału (kilka, kilkanaście elementów), to
> przechodzimy na liniowe. Liczba odczytów z pamięci będzie taka
> raczej taka sama, za to liczba operacji mniejsza. I to daje
> dobre efekty, tu masz kod:
>
> https://github.com/WojciechMula/simd-search/blob/mas
ter/binsearch-linear.cpp
Myślę że standardowa metoda z biblioteki QT do wyszukiwania binarnego tak
działa, czyli wyszukuje metodą pełnego przeglądu gdy jest mało danych, albo
gdy przedział jest mały. Zastąpiłem pełen przegląd właśnie tą metodą i
na małych zbiorach danych nie zaobserwowałem dużych zmian w czasie
działania programu. Niestety nie mam na razie jednoznacznych pomiarów
czasu, ponieważ program daje inne wyniki po zastosowaniu metody wyszukiwania
binarnego.
Pozdrawiam
Następne wpisy z tego wątku
- 07.05.16 16:10 M.M.
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-03 Trybik
- 2025-07-04 Renault Symbioz
- 2025-07-04 Architektura IIIRP: Wyjątkowa, a prymitywniejsza niż stodoła pod zaborami
- 2025-07-04 Warszawa => International Freight Forwarder <=
- 2025-07-04 Wrocław => SAP ABAP Developer <=
- 2025-07-04 Warszawa => Mid/Senior IT Recruiter <=
- 2025-07-04 Białystok => Kotlin Developer <=
- 2025-07-04 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-07-04 Warszawa => Specjalista wsparcia IT - analiza techniczna sprzętu IT <
- 2025-07-04 Zakrzewo => Konsultant SAP HCM <=
- 2025-07-04 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-04 Szczecin => Key Account Manager IT <=
- 2025-07-04 Warszawa => Technik IT - Konfiguracja i Wsparcie Sprzętowe <=
- 2025-07-04 Warszawa => Technique IT - Hardware Configuration and Support <=
- 2025-07-04 Warszawa => Specjalista ds. Sprzętu IT i Wsparcia Technicznego <=