-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!.POSTED!not-for-mail
From: Borneq <b...@a...hidden.pl>
Newsgroups: pl.comp.programming
Subject: Jaki algorytm do komponentu drzewka?
Date: Sat, 21 Mar 2015 18:36:10 +0100
Organization: ATMAN - ATM S.A.
Lines: 49
Message-ID: <meka6a$prv$1@node1.news.atman.pl>
NNTP-Posting-Host: 91.239.205.105
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: node1.news.atman.pl 1426959370 26495 91.239.205.105 (21 Mar 2015 17:36:10
GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Sat, 21 Mar 2015 17:36:10 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101
Thunderbird/31.5.0
Xref: news-archive.icm.edu.pl pl.comp.programming:207648
[ ukryj 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
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-02-04 ranking wyciszenia, głośność, hałas przy 130 km/h, na postoju, przy przyspieszaniu
- 2025-02-05 Warszawa => IT Recruiter <=
- 2025-02-05 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-02-05 Rzeszów => Spedytor Międzynarodowy <=
- 2025-02-05 Warszawa => IT Business Analyst <=
- 2025-02-05 Warszawa => Specjalista DevOps <=
- 2025-02-05 Łódź => NodeJS Developer <=
- 2025-02-05 Warszawa => QA Engineer (Quality Assurance) <=
- 2025-02-05 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-02-05 Warszawa => QA Engineer <=
- 2025-02-05 Warszawa => Programista Full Stack .Net <=
- 2025-02-05 Re: UK: Michał K. dalej czeka na rozprawę ekstradycyjną w areszcie [bo nie (jeszcze?) zebrał kaucji]
- 2025-02-04 podpisywanie umów z datą wsteczną
- 2025-02-04 Radio internetowe do starego Androida
- 2025-02-04 "ogrodowa linia napowietrzna"