I kolokwium - zadanie 3 z 2007
4 posters
Page 1 of 1
I kolokwium - zadanie 3 z 2007
Zadanie 3 [5 punktów]
Zaproponuj implementację następujących operacji na tablicy liczb naturalnych T[0..n+1], początkowo wypełnionej zerami, w taki sposób, żeby ich koszt zamortyzowany był stały.
Inc(i):: T[i]:=T[i]+1 // zawsze 0<i<n+1
BlockDec(i):: Jeśli T[i]=0 nic nie rób. W przeciwnym przypadku znajdź najbliższy indeks j taki, że T[i]≠T[j] (jeśli są dwa takie indeksy wybieramy mniejszy z nich). Dla każdego k pomiędzy i oraz j wykonaj T[k]:=T[k]–1
Hej, czy ktoś robił już to zadanie i ma pomysł jak je rozwiązać?
Próbowaliśmy na razie bezskutecznie walczyć z liniowym szukaniem końców bloków (uznaliśmy, że to wyszukiwanie psuje koszt zamortyzowany).
Re: I kolokwium - zadanie 3 z 2007
Wydaje mi się, że jeżeli zrobimy szukanie końców tak jak w zadaniu z palindromami - od środka rozjeżdżamy się wskaźnikami i zwiążemy z każdą wstawianą jedynką kredyt 3, to nam wystarczy na opłacenie przy zmniejszaniu.
3 = 1 na usunięcie, 1 na przeszukiwanie siebie, 1 na przeszukiwanie punktu powstałego przez odbicie lustrzane siebie względemu punktu i.
Chyba napisałem niejasno bo Filip na SO próbował to obalić
Jak zrobimy szukanie, to fizycznie odbieramy 2 zł od tych elementów z przedziału, które bedziemy zmniejszać - od krótszego przedziału, to wydaje się rozjaśniać to co napisałem wyżej. W ten sposób cały czas jest parzysta liczba złotówek
3 = 1 na usunięcie, 1 na przeszukiwanie siebie, 1 na przeszukiwanie punktu powstałego przez odbicie lustrzane siebie względemu punktu i.
Chyba napisałem niejasno bo Filip na SO próbował to obalić
Jak zrobimy szukanie, to fizycznie odbieramy 2 zł od tych elementów z przedziału, które bedziemy zmniejszać - od krótszego przedziału, to wydaje się rozjaśniać to co napisałem wyżej. W ten sposób cały czas jest parzysta liczba złotówek
Last edited by adek05 on Tue Nov 15, 2011 10:42 pm; edited 1 time in total
adek05- Liczba postów : 34
Join date : 2010-10-20
Re: I kolokwium - zadanie 3 z 2007
Podepne się pod ten temat:
Podaj strukturę danych umożliwiającą wykonywanie w czasie O(logn) następujących operacji na początkowo pustym zbiorze S:
insert(v,S)
deletemedian(S)
przy założeniu, że elementy zbioru S pochodzą z dowolnego zbioru liniowego uporządkowanego.
Any idea?
Podaj strukturę danych umożliwiającą wykonywanie w czasie O(logn) następujących operacji na początkowo pustym zbiorze S:
insert(v,S)
deletemedian(S)
przy założeniu, że elementy zbioru S pochodzą z dowolnego zbioru liniowego uporządkowanego.
Any idea?
Gricha- Liczba postów : 425
Join date : 2010-10-12
Age : 32
Skąd : Myszków
Re: I kolokwium - zadanie 3 z 2007
Mój pomysł jest taki:
EDIT: lepszy link:
https://docs.google.com/drawings/d/1UeesX4eQhJ8_7tri6K3abHYPjJbNaDpzW2cY5Ik4MpY/edit
Insert(v, S)
Patrzymy czy v jest większy czy mniejszy od mediany
większy ląduje w prawym kopcu, mniejszy lub równy w lewym
I robimy poprawienie struktury. Jeśli size(L) + 1 < size(P) lub odwrotnie size(L) > size(P) + 1 to robimy jakby rotację w lewo lub prawo odpowiednio.
Rotacja polega na przerzucenia korzenia do odpowiedniego kopca i wyciągnięcia z wierzchołka drugiego nowej mediany.
Delete polega na wyciągnięciu mediany i wzięciu elementu z odpowiedniego kopca tak, żeby zachować warunek |size(P) - size(L)| <= 1 - taki niezmiennik chcemy utrzymać i insert zapisany jak wyżej zdaje się go zachowywać.
Jak ktoś widzi błąd, to dajcie znać!
EDIT: lepszy link:
https://docs.google.com/drawings/d/1UeesX4eQhJ8_7tri6K3abHYPjJbNaDpzW2cY5Ik4MpY/edit
Insert(v, S)
Patrzymy czy v jest większy czy mniejszy od mediany
większy ląduje w prawym kopcu, mniejszy lub równy w lewym
I robimy poprawienie struktury. Jeśli size(L) + 1 < size(P) lub odwrotnie size(L) > size(P) + 1 to robimy jakby rotację w lewo lub prawo odpowiednio.
Rotacja polega na przerzucenia korzenia do odpowiedniego kopca i wyciągnięcia z wierzchołka drugiego nowej mediany.
Delete polega na wyciągnięciu mediany i wzięciu elementu z odpowiedniego kopca tak, żeby zachować warunek |size(P) - size(L)| <= 1 - taki niezmiennik chcemy utrzymać i insert zapisany jak wyżej zdaje się go zachowywać.
Jak ktoś widzi błąd, to dajcie znać!
adek05- Liczba postów : 34
Join date : 2010-10-20
Re: I kolokwium - zadanie 3 z 2007
Mediana jest zdefiniowana jako: dla nieparzystego n to (n+1)/2 element, dla parzystego n, to średnia arytmetyczna, obu środkowych elementów. Tak więc trochę trzeba zmodyfikować tę strukturę, ale ogólnie pomysł mi się podoba
Maciek- Liczba postów : 186
Join date : 2010-10-12
Re: I kolokwium - zadanie 3 z 2007
Racja! Ale wtedy jak usunąć medianę? Przecież ona fizycznie w zbiorze nie wystepuje... może jest jakieś założenie co do tego czym jest mediana?
adek05- Liczba postów : 34
Join date : 2010-10-20
Re: I kolokwium - zadanie 3 z 2007
Filip, spadłem z krzesła =)
Przez Ciebie będzie mi się dzisiaj KD śnić...
Przez Ciebie będzie mi się dzisiaj KD śnić...
adek05- Liczba postów : 34
Join date : 2010-10-20
Re: I kolokwium - zadanie 3 z 2007
Raczej zakładałbym, że medianą będzie element najbliższy medianie mniejszy równy od mediany. Wtedy ma sens deletemedian
Gricha- Liczba postów : 425
Join date : 2010-10-12
Age : 32
Skąd : Myszków
Re: I kolokwium - zadanie 3 z 2007
Hej, ma ktoś może dobrze zapisany algorytm sortowania mergesortem ze scalaniem w miejscu? Ten z podziałem na bloki itd.
Chciałem się dowiedzieć co się dzieje jak już mamy posortowane blokowo i mamy ten bufor na początku. Co dalej robimy - jak "wsortowujemy" bloki teraz?
Chciałem się dowiedzieć co się dzieje jak już mamy posortowane blokowo i mamy ten bufor na początku. Co dalej robimy - jak "wsortowujemy" bloki teraz?
Gricha- Liczba postów : 425
Join date : 2010-10-12
Age : 32
Skąd : Myszków
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|