• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Scalanie przy użyciu jednej tablicy pomocniczej

Object Storage Arubacloud
0 głosów
522 wizyt
pytanie zadane 2 stycznia 2017 w Algorytmy przez Mikeros Początkujący (320 p.)
zamknięte 5 stycznia 2017 przez Mikeros
Witam forumowiczów. Mam do przerobienia algorytm sortowania przez scalanie z książki "Wprowadzenie do algorytmów" Cormena, a dokładniej algorytm samego scalania. Zadanie polega na tym, aby zamiast dwóch tablic pomocniczych użyć jednej.

SCAL(A, p, q, r)
    n=q-p+1
    m=r-q
    for i=1 to n
        do B[i]=A[p+i-1]
    B[n+1]=nieskonczonosc
    for j=1 to m
        do B[q+1+j]=A[q+j]
    B[r+2]=nieskonczonosc

 

Problem zachodzi w drugiej pętli. Dla podciągu o indeksach np. 2-12 następuje sytuacja, w której wartownik (nieskończoność) stoi na 7. miejscu, a rozpoczęcie przypisywania od B[q+1+j] pomija jedną komórkę tablicy. q = 7, j = 1 - q + 1 + j = 9. Dla innych podciągów ta pętla działa prawidłowo. Nie mam kompletnie pomysłu na ten problem, a nie chcę używać ifów dla różnych przypadków. Jak więc znaleźć uniwersalne rozwiązanie?

PS: Tablice muszą zaczynać się od indeksu 1, gdyż tak jest w oryginalnym algorytmie w książce.

Pozdrawiam.
komentarz zamknięcia: Temat już nieaktualny.

3 odpowiedzi

0 głosów
odpowiedź 2 stycznia 2017 przez morele123 Gaduła (4,790 p.)
A czy zadawalałoby cię, w tym scalaniu użyć sortowania przez wstawianie ? Wtedy mając te dwie tablice połączyłbyś je w jedną uporządkowaną.
komentarz 2 stycznia 2017 przez Mikeros Początkujący (320 p.)
Musi być koniecznie przez scalanie. To jest zadanie od wykładowcy. A tak poza tym, to nie wiem jaki tu jest stosunek do ludzi szukających pomocy w zadaniach - na niektórych forach można dostać niezłą "lekcje" za szukanie pomocy, także przepraszam z góry. :D
komentarz 2 stycznia 2017 przez morele123 Gaduła (4,790 p.)
W sumie, to przecież, wystarczy jedna tablica lol. Jak masz w tym właściwym algorytmie Tablice B i C to B rób od 1 do n/2 a B od n/2 + 1 do n.
0 głosów
odpowiedź 2 stycznia 2017 przez Michał628496 Pasjonat (17,340 p.)
Nie rozumiem , chcesz scalić tablicę w tablicę ?
komentarz 2 stycznia 2017 przez morele123 Gaduła (4,790 p.)
Chodzi mu o algorytm sortujący, tam on wykkożysutuej 2 tablice pomocnicze do posortowania, a tu on chce jedno.
komentarz 2 stycznia 2017 przez Mikeros Początkujący (320 p.)
To nie jest pełny algorytm scalania. Wstawiłem część, która sprawia problem, a jest niezależna od tej niewstawionej.
0 głosów
odpowiedź 3 stycznia 2017 przez Mikeros Początkujący (320 p.)
Chyba udało mi się wymyślić działający algorytm:

 

SCAL(A, p, q, r)
    n=q-p+1
    m=r-q
    for i=1 to n
        do B[i]=A[p+i-1]
    B[n+1]=nieskonczonosc
    for j=1 to m
        do B[n+1+j]=A[q+j]
    B[n+2+j]=nieskonczonosc
    i=1
    j=n+2
    for k=p to r
       do if B[i] <= B[j]
              then A[k]=B[i]
             i=i+1
              else A[k]=B[j]
                   j=j+1

 

Jak oceniacie?

Podobne pytania

0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 12 grudnia 2016 w Algorytmy przez Masochista Początkujący (310 p.)
0 głosów
1 odpowiedź 1,186 wizyt
pytanie zadane 23 kwietnia 2017 w C i C++ przez miśka Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 606 wizyt

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...