-
Data: 2015-03-21 18:36:10
Temat: Jaki algorytm do komponentu drzewka?
Od: Borneq <b...@a...hidden.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Zamierzam napisać od podstaw prosty komponent drzewka, język i
środowisko nie gra roli.
Z punktu użytkownika będzie to struktura, gdzie mamy listę (a raczej
wektor, bo nie będzie to lista linkowana a rozszerzana tablica) węzłów
pierwszego poziomu. Każdy z nich (jeśli ma dzieci) będzie miał wektor
swoich węzłów i tak dalej.
Każdy z tych węzłów może mieć właściwość expanded lub nie, więc węzeł
który jest expanded lub nie, może mieć dzieci z których jedne są
expanded lub nie.
Jak mam jedną listę, która przechodzi przez wszystkie te listy, to
wyświetlanie tego już jest łatwe.
A co mi chodzi - mam drzewko:
a
b
d
e
c
f
g
wcięcia są ważne
Fizycznie elementy są w kilku listach:
root-> a, g
a->b,c
b->d,e
c->f
Podczas gdy mamy jedną listę do wyświetlenia:
a b d e c f g ("pozycją wizualną" nazwę a=0,b=1,d=2 etc)
Są dwa problemy:
1. znaleźć pozycję wizualną dla węzła
2. znaleźć węzeł dla zadanej pozycji wizualnej
Punkt 2 jest łatwy, jeśli istnieje lista węzłów jak a b d e c f g, przez
chwilę myślałem że to rozwiązanie.
Dla operacji expand/collapse musimy przemieścić blok i wstawić lub
usunąć, co jest dopuszczalne.
Punkt 1 nadal trudny.
Poza tyym, co gorsze - jeśli dodajemy węzeł, musimy zlokalizować go
przez punkt 1, a poza tym dodanie jednego wymaga rozsunięcia, więc gdy
dodamy wiele, mamy Move wiele razy co jest zbyt wolne.
Drugie rozwiązanie (kiedyś go użyłem dla drzewka, ale było to
rozwiązanie bardzo skomplikowane, może da się prościej):
Węzeł (czy lista wezłów - nie ma tu wielkiej różnicy) ma pole
VisibleCount oznaczające wielkość całej rozwiniętej częściowo podgałęzi.
Tutaj dodawanie tak nie spowalnia, bo trzeba updatować jedynie
VisibleCount parenta, parenta->parenta, aż do korzenia.
Ale punkty 1 i 2 pozostają trudne.
Czy jest jakiś wydajny algorytm na to?
Następne wpisy z tego wątku
- 22.03.15 07:55 Borneq
- 22.03.15 09:29 Dariusz Jakubowski
- 22.03.15 09:39 Borneq
- 22.03.15 10:05 Dariusz Jakubowski
- 22.03.15 10:22 Borneq
- 22.03.15 10:26 Dariusz Jakubowski
- 22.03.15 10:47 Borneq
- 22.03.15 19:33 Dariusz Jakubowski
Najnowsze wątki z tej grupy
- 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
- ,,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
Najnowsze wątki
- 2025-07-23 Gdańsk => Programista Delphi <=
- 2025-07-23 Gdańsk => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-23 Warszawa => Starszy inżynier DevOps (AWS) <=
- 2025-07-23 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-23 Kraków => Senior Fullstack Engineer (Low-Code Platform) <=
- 2025-07-23 Wrocław => Senior Key Account Manager IT <=
- 2025-07-23 Trójmiasto => Head of Social Media <=
- 2025-07-23 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-23 Lublin => ERP Implementation Consultant (AP Module) <=
- 2025-07-23 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-23 Warszawa => Inżynier oprogramowania .Net <=
- 2025-07-23 Kraków => Kotlin Developer <=
- 2025-07-23 Żerniki => Dyspozytor Międzynarodowy <=
- 2025-07-23 Warszawa => Java Developer <=
- 2025-07-23 Wrocław => Konsultant wdrożeniowy (systemy controlingowe) <=