Autor Wątek: Zapisywanie drzewa binarnego do pliku  (Przeczytany 4416 razy)

Offline Silther

  • Użytkownik

# Styczeń 19, 2008, 00:44:21
Wymyśliłem, rzeczywiście ciekawy trik. Jakby ktoś się jeszcze zastanawiał jak to działa, to po prostu z każdej liczby innej od zera robi jedynkę.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 19, 2008, 00:45:50
Cytuj
BUHAHAHAHAHAHAHA! Nie lubisz klamerek czy jak?
W jednolinijkowych if'ach ta klamerka na końcu trochę przeszkadza, a nie zmniejsza to czytelności kodu tak jak używanie ?: zamiast if'a. :)

bies

  • Gość
# Styczeń 19, 2008, 02:30:52
Cytuj
BUHAHAHAHAHAHAHA! Nie lubisz klamerek czy jak?
W jednolinijkowych if'ach ta klamerka na końcu trochę przeszkadza, a nie zmniejsza to czytelności kodu tak jak używanie ?: zamiast if'a. :)
Taa, jasne. A używanie operatora przecinka aby trzy instrukcje upchnąć w jednolinijkowego ifa nie zmniejsza czytelności.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 19, 2008, 03:09:33
Taa, jasne. A używanie operatora przecinka aby trzy instrukcje upchnąć w jednolinijkowego ifa nie zmniejsza czytelności.
Jak dla mnie ja poprawia. :)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Styczeń 19, 2008, 10:50:12
Taa, jasne. A używanie operatora przecinka aby trzy instrukcje upchnąć w jednolinijkowego ifa nie zmniejsza czytelności.
Jak dla mnie ja poprawia. :)
Zainspirowany podejściem Krzyśka K. też zacząłem ten magiczny przecinek używać w ifach przed kilkoma dniami i potwierdzam że jest fajny :)

Offline Demon

  • Użytkownik

# Styczeń 19, 2008, 19:05:15
Tak wracając do tematu to ten mój sposób da się zrobić iteracyjnie (tzn zapis), a odpowiedni algorytm do tego to Breadth-first search.
« Ostatnia zmiana: Styczeń 19, 2008, 19:39:05 wysłana przez Demon »

Offline Steel_Eagle

  • Użytkownik

# Styczeń 19, 2008, 20:30:12
To jak już przy trikach jesteśmy to przynajmniej stosujmy ten jeden podstawowy, bo mnożenie przez potęgi dwójki jest karalne ;)

if(root) putc(!!root->right+ (!!root->left << 1) ,fp), SaveRec(root->left,fp), SaveRec(root->right,fp);

Offline Kos

  • Użytkownik
    • kos.gd

# Styczeń 19, 2008, 21:06:01
To jak już przy trikach jesteśmy to przynajmniej stosujmy ten jeden podstawowy, bo mnożenie przez potęgi dwójki jest karalne ;)
Nawiasem, kompilator tego nie optymalizuje? Jest jakaś sensowna różnica wydajności?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 19, 2008, 21:24:45
Cytuj
To jak już przy trikach jesteśmy to przynajmniej stosujmy ten jeden podstawowy, bo mnożenie przez potęgi dwójki jest karalne ;)
Zastanawiałem się nad tym, ale tutaj chodziło o zmniejszenie ilości kodu, a to by wydłużyło go o przynajmniej trzy znaki. :)

Offline Steel_Eagle

  • Użytkownik

# Styczeń 19, 2008, 22:00:32
Pewnie że optymalizują, ale * 2 kuje w oczy. Poza tym << bardziej oddaje sens operacji którą trzeba wykonać.
« Ostatnia zmiana: Styczeń 20, 2008, 15:07:36 wysłana przez shyha »

Offline Demon

  • Użytkownik

# Styczeń 20, 2008, 14:50:55
Nie no oczywiście jeśli brać pod uwagę wydajność to trzeba użyć przesunięcia bitowego, jeśli zaś chodzi o długość kodu, to tak jak to napisał Krzysiek.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 20, 2008, 15:12:24
Nie no oczywiście jeśli brać pod uwagę wydajność to trzeba użyć przesunięcia bitowego, jeśli zaś chodzi o długość kodu, to tak jak to napisał Krzysiek.
Myślę, że to nie wpłynie wiele na wydajność, a na nowszych prockach to pewnie już ani trochę, więc jak coś to radzę szukać sensowniejszych miejsc na optymalizację. :)

Offline Esidar

  • Użytkownik

# Styczeń 21, 2008, 23:24:35
Wiem, będzie to OT ale...
   if(root) putc(!!root->right+2*!!root->left,fp), SaveRec(root->left,fp), SaveRec(root->right,fp);
...
   root->left->left ? state |= left_node : 0;
...
   r->left  = (b&1) ? &*c++ : NULL;
...lol

Z chęcią bym zobaczył kod twojego silnika :)

Strzelam, że większość plików cpp to 5 linijkowce ;)