Element w ciągu uporządkowanym?

0

Mam następującą sytuację: w tablicy znajduje się n uporządkowanych elementów. Moim celem jest umieszczenie kolejnego elementu gdzieś w tablicy tak by nadal była uporządkowana. Miejsce umieszczenia znajduję metodą połowienia, ale jak najbardziej ekonomicznie umieścić tam element? (jak przesunąć kolejne o jeden?).

Pozdrawiam Hag

0

Tez jestem ciekaw jaka jest odpowiedz na to pytanie. Pewnie dopoki nie sprawdzimy to sie nie przekonamy :)
Wchodza chyba w grę dwie metody:

  1. przesuwanie element po elemencie w pętli for.
  2. kopiowanie do posredniego bufora za pomoca move.

Podejrzewam ze efekt moze byc chyba rozny w zaleznosci od wielkosci elelentow. Jesli to male elementy (po 4 bajty lub niewiele wiecej) a jest ich duzo to obstawialbym ze to podwojne kopiowanie za pomoca move bedzie szybsze choc podwojne. Jesli jednak elementy sa duze (jakies rekordy na przyklad) to moze petla for bedzie szybsza.
Z drugiej strony nie wiem jak zadziala optymalizator delphi przy takim kodzie - moze sprytnie wykryje ze to jest kopiowanie lancucha i zakoduje to jako rep movsed i wtedy to petla for moze byc szybsza niezalezne od rozmiarow elementow:)
Tak czy inaczej jelsi pierwszy sie dowiesz albo sprawdzic to prosze bys dal znac chocby w tym watku.
Pozdrawiam.

0

Tak sobie myśle że może by na przykład tak. Niech każda wartość z tablicy uporządkowanej ma przypisaną wartość całkowitą typu real w innej tablicy. A gdy chcę dodać element przypisuję mu wartość równą średniej wartości elementu wyższego i niższego. np. a=1 b=2 d=3 e=4 i chcę dodać element c. daję c=(2+3)/2=2.5 A potem po prostu sortuję wszysteki wartości. To chyba będzie wygodne gdy tych elementów do umieszczenia będzie dużo.

Co sądzicie?

Pozdrawiam Hag

0

Sądzę, że powinieneś zainteresować się listami dynamicznymi...

1 użytkowników online, w tym zalogowanych: 0, gości: 1