Projekt „Nový hledač“
Unsorting

Bude se rychle stahovat velké množství WWW stránek, odhadem 10000 stránek za sekundu.
Poběží paralelně 100 stahovacích programů (procesů) Downloader, v každém poběží 10 paralelních částí (podprocesů).
Realizoval jsem to pomocí metody AsyncCallback programovacího jazyku C#.
Pokud by se stahovaly po sobě WWW stránky z jednoho WWW serveru (IP adresy, domény),
mohla by tato rychlost příslušný WWW server shodit, nebo by mi mohl tamní webmaster zakázat přístup.

Proto musím udělat unsort původního pořadí WWW adres ke stažení tak, aby v unsortovaném pořadí, podle kterého se bude stahovat,
byly WWW adresy z jednoho a téhož WWW serveru, z jedné a téže IP adresy plus z jedné a téže domény co nejvíce rozstrkané po celém pořadí.

Nestačí udělat unsort jen pomocí domén, protože řada domén je umístěná na společných IP adresách
(WWW servery sledují počet spojení z jedné IP adresy, např. za den).
Také nestačí udělat unsort jen pomocí IP adres, protože různé IP adresy mohou být umístěné na jednom WWW serveru.

Například z mých 22 WWW serverů je jich 15 umístěno na jedné společné IP adrese a na tomtéž serveru.

Můj unsort je nyní už trojúrovňový, nejprve podle serverů, pak podle IP adres a pak podle domén.
Tohle mám již napsané i odladěné.

Tady jsou příklady unsortu.

Nejprve názorné, pomocí domén, abyste si mohli udělat představu u účinnosti mého algoritmu:

Příklad 1: původní pořadíunsortované pořadí
Příklad 2: původní pořadíunsortované pořadí
Příklad 3: původní pořadíunsortované pořadí
Příklad 4: původní pořadíunsortované pořadí
Příklad 5: původní pořadíunsortované pořadí

Tady je pořadí pomocí IP adres (sekundární pořadí je děláno pomocí domén):

Příklad 1: původní pořadíunsortované pořadí
Příklad 2: původní pořadíunsortované pořadí
Příklad 3: původní pořadíunsortované pořadí
Příklad 4: původní pořadíunsortované pořadí
Příklad 5: původní pořadíunsortované pořadí

Tady je pořadí pomocí serverů (sekundární pořadí je děláno pomocí IP adres, terciární pořadí je děláno pomocí domén):

Příklad 1: původní pořadíunsortované pořadí
Příklad 2: původní pořadíunsortované pořadí
Příklad 3: původní pořadíunsortované pořadí
Příklad 4: původní pořadíunsortované pořadí (a) - unsortované pořadí (b)
Příklad 5: původní pořadíunsortované pořadí

Poznámky:
Neexistující WWW adresa http://www.milionovastrankax.net je z unsortovaného pořadí vynechána.
Ve čtvrtém příkladu je unsortované pořadí (a) včetně neexistujících WWW adres, unsortované pořadí (b) bez neexistujících WWW adres.
Ve čtvrtém příkladu unsortovaného pořadí (a) jsem pro neexistující WWW adresy odzkoušel různé kombinace serverů, IP adres a domén.  

Tady jsou IP adresy některých mých mých WWW serverů, podle kterých si to pořadí, dělané pomocí IP adres, můžete zkontrolovat.
U Active24 je na jednom serveru jedna IP adresa, což ale samozřejmě neplatí obecně.

Nezdá se to, ale je to matematicky velmi obtížná úloha, algoritmus má řadu částí.
Naprogramovaná metoda má 732 řádků v jazyce C#.
Vymyšlení a naprogramování mi trvalo cca 5 dní a nocí (s menšími přetržkami).
Je to asi nejtěžší algoritmus co jsme kdy vymýšlel a programoval.