-
X-Received: by 10.31.136.77 with SMTP id k74mr46213vkd.4.1503047501809; Fri, 18 Aug
2017 02:11:41 -0700 (PDT)
X-Received: by 10.31.136.77 with SMTP id k74mr46213vkd.4.1503047501809; Fri, 18 Aug
2017 02:11:41 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.
iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!i19no22
6586qte.1!news-out.google.com!i9ni19652qte.0!nntp.google.com!i19no226582qte.1!p
ostnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Fri, 18 Aug 2017 02:11:41 -0700 (PDT)
In-Reply-To: <3...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=77.254.35.4;
posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
NNTP-Posting-Host: 77.254.35.4
References: <6...@g...com>
<3...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <2...@g...com>
Subject: Re: ciąg dalszy drzewa czerwono-czarne
From: "M.M." <m...@g...com>
Injection-Date: Fri, 18 Aug 2017 09:11:41 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 128
Xref: news-archive.icm.edu.pl pl.comp.programming:211182
[ ukryj nagłówki ]On Friday, August 18, 2017 at 10:51:33 AM UTC+2, bartekltg wrote:
> On Thursday, August 17, 2017 at 11:04:34 PM UTC+2, M.M. wrote:
> > No więc dopracowałem drzewko czerwono czarne. Może jeszcze zostały
> > jakieś błędy, ale chodziło kilkadziesiąt godzin na testach i nie
> > wywaliło się.
>
> Za szybko nie będe mógł poczytać.
Tak, wymaga przemyślenia, w poprzednim wątku od pisania na szybko
zrobiła się sieczka.
> Jak to nie tajne:), wrzuć gdzies całość (włacznie z drzewkiem).
Nic tajnego nie ma, zrobię jakiegoś bloga i wkrótce wrzucę.
Tak ogólnie, to poza sortowaniem, mam wszystko bardzo mocno
wzorowane na Cormenie, tylko zamiast wskaźników mam indeksy.
Sortowania ani w Cormenie, ani w Internecie nie znalazłem,
musiałem zastanowić się sam. Wrzucam kod, zapewne jest
za dużo ifów, zapewne można to jeszcze zoptymalizować.
Generalnie bardzo polecam to rozwiązanie, szczególnie
gdy ktoś ma bardzo dużo wyszukiwania, przeglądania
od przodu do tyłu, lub od tylu do przodu, gdy
jest dużo operacji upperBound lub lowerBound.
void sort() {
for(TNODE node=min(), pos=RBT_NULL+1 ; !isNull(node) ; node=next(node), pos++
) {
if( node == pos )
continue;
std::swap( nodes[node] , nodes[pos] );
if( nodes[node].parent == nodes[pos].parent ) {
std::swap( nodes[nodes[node].parent].left ,
nodes[nodes[node].parent].right );
if( nodes[node].left != RBT_NULL ) nodes[nodes[node].left ].parent =
node;
if( nodes[node].right != RBT_NULL ) nodes[nodes[node].right].parent =
node;
if( nodes[pos ].left != RBT_NULL ) nodes[nodes[pos ].left ].parent =
pos ;
if( nodes[pos ].right != RBT_NULL ) nodes[nodes[pos ].right].parent =
pos ;
} else if( nodes[node].parent == node ) {
if( nodes[pos].left == pos ) {
std::swap( nodes[pos].left , nodes[node].parent );
if( nodes[pos ].right != RBT_NULL ) nodes[nodes[pos
].right].parent = pos ;
} else {
std::swap( nodes[pos].right , nodes[node].parent );
if( nodes[pos].left != RBT_NULL ) nodes[nodes[pos].left].parent =
pos ;
}
if( nodes[node].left != RBT_NULL ) nodes[nodes[node].left ].parent =
node;
if( nodes[node].right != RBT_NULL ) nodes[nodes[node].right].parent =
node;
if( nodes[pos].parent != RBT_NULL ) {
if( nodes[ nodes[pos].parent ].left == node ) {
nodes[ nodes[pos].parent ].left = pos;
} else {
nodes[ nodes[pos].parent ].right = pos;
}
}
} else if( nodes[pos].parent == pos ) {
if( nodes[node].left == node ) {
std::swap( nodes[node].left , nodes[pos].parent );
if( nodes[node].right != RBT_NULL )
nodes[nodes[node].right].parent = node ;
} else {
std::swap( nodes[node].right , nodes[pos].parent );
if( nodes[node].left != RBT_NULL ) nodes[nodes[node].left].parent
= node ;
}
if( nodes[pos].left != RBT_NULL ) nodes[nodes[pos].left ].parent =
pos;
if( nodes[pos].right != RBT_NULL ) nodes[nodes[pos].right].parent =
pos;
if( nodes[node].parent != RBT_NULL ) {
if( nodes[ nodes[node].parent ].left == pos ) {
nodes[ nodes[node].parent ].left = node;
} else {
nodes[ nodes[node].parent ].right = node;
}
}
} else {
if( nodes[node].left != RBT_NULL ) nodes[nodes[node].left ].parent =
node;
if( nodes[node].right != RBT_NULL ) nodes[nodes[node].right].parent =
node;
if( nodes[pos ].left != RBT_NULL ) nodes[nodes[pos ].left ].parent =
pos ;
if( nodes[pos ].right != RBT_NULL ) nodes[nodes[pos ].right].parent =
pos ;
if( nodes[node].parent != RBT_NULL ) {
if( nodes[ nodes[node].parent ].left == pos ) {
nodes[ nodes[node].parent ].left = node;
} else {
nodes[ nodes[node].parent ].right = node;
}
}
if( nodes[pos].parent != RBT_NULL ) {
if( nodes[ nodes[pos].parent ].left == node ) {
nodes[ nodes[pos].parent ].left = pos;
} else {
nodes[ nodes[pos].parent ].right = pos;
}
}
}
if( root == node )
root = pos;
else if( root == pos )
root = node;
node = pos;
}
}
Pozdrawiam
Następne wpisy z tego wątku
- 21.08.17 13:30 M.M.
Najnowsze wątki z tej grupy
- Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- 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
Najnowsze wątki
- 2026-01-23 Stop na zielonym
- 2026-01-23 KSEFowy trolling
- 2026-01-23 KSEFowy trolling
- 2026-01-23 Warszawa => Software Development Team Leader (C#/.Net) <=
- 2026-01-23 Toruń => Sales Engineer (Database background) <=
- 2026-01-23 Toruń => Preseles Inżynier (background baz danych) <=
- 2026-01-23 antena gsm - kabel - antena gsm
- 2026-01-22 Złomnik ty pisowska SZMATO! ;-)
- 2026-01-22 PID - jeszcze raz
- 2026-01-22 konkret24.tvn24.pl "gwarantuje": za SAMO wylanie gnojówki pod domem tusk-ministra aresztu nie będzie! ;-)
- 2026-01-22 Prawo na wesoło: nakaz rozbiórki "dwóch przyczep samochodowych" jako budynku ;-)
- 2026-01-22 Airtagi
- 2026-01-22 Warszawa => Full Stack Developer (Go/React) <=
- 2026-01-22 Warszawa => Senior Account Manager <=
- 2026-01-21 Nissan Leaf II 40kWh - degradacja baterii, SOH, uszkodzona bateria




Ceny mieszkań zaskoczyły nawet ekspertów. Chodzi o taktykę deweloperów