See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Comb sort - Wikipedia

Comb sort

Da Wikipedia, l'enciclopedia libera.

In Informatica, comb sort è un algoritmo di ordinamento ideato da Stephen Lacey e Richard Box, nell' Aprile 1991. Comb sort migliora l'algoritmo bubble sort e compete in velocità con algoritmi storicamente veloci come il Quicksort. L'idea basilare dell'algoritmo è quella di eliminare le cosiddette tartarughe, ovvero valori piccoli vicino la fine della lista, essendo provato che in un bubble sort questi valori tendono spessissimo a scendere nella loro posizione in modo tremendamente lento. (i conigli, ovvero grandi valori all'inizio della lista, non rappresentano un problema nel bubble sort perché generalmente vengono spostati molto velocemente).

Nel bubble sort, quando vengono confrontati due elementi, essi hanno sempre un gap (distanza reciproca) pari ad 1. L'idea alla base del comb sort è che il gap può essere anche maggiore. (Anche lo Shell sort è basato su questa idea, ma esso rappresenta una modifica dell'insertion sort piuttosto che del bubble sort).

L'intervallo di confronto comincia come la lunghezza dell'array da ordinare, divisa per il fattore shrink (generalmente 1,3), e la lista viene ordinata con tale intervallo (arrotondato per difetto all'intero, se necessario). Alchè esso viene diviso nuovamente per il fattore Shrink, e la lista viene ordinata con questo nuovo intervallo. Il processo si ripete finché il gap è 1. A questo punto, comb sort continua ad usare un gap di 1 finché non si ha ordinamento totale. Il passaggio finale dell'algoritmo è quindi equivalente ad un bubble sort, ma in questo modo molte tartarughe sono scomparse, ed in tal modo il bubble sort è molto più efficiente.

Indice

[modifica] Fattore Shrink

Il fattore Shrink ha un grande peso sull'efficienza del comb sort. Ai tempi della sua creazione, gli autori suggerirono 1.3 in base a delle prove sperimentali basate sulla casualità. Un valore troppo piccolo degrada l'algoritmo perché si necessita di più confronti, mentre un valore troppo alto non riuscirebbe ad eliminare un numero sufficiente di tartarughe per essere un miglioramento sostanziale del bubble sort.

Il valore consigliato come fattore è 1/(1-\frac{1}{e^\varphi}) \approx 1.247330950103979.

[modifica] Combsort11

Con un fattore di 1,3, ci sono solo tre possibili modi di concludere una lista di intervalli: (9, 6, 4, 3, 2, 1), (10, 7, 5, 3, 2, 1), oppure (11, 8, 6, 4, 3, 2, 1). Soltanto l'ultima sequenza uccide tutte le tartarughe prima che il gap divenga 1. Ragion per cui, si hanno miglioramenti significativi in velocità se l'intervallo viene settato ad 11 ogni qual volta esso debba diventare 9 o 10. Questa variazione è chiamata Combsort11.

Questo si nota anche perché se si arrivasse ad usare un intervallo pari a 9 o a 10, il passo finale con un intervallo pari ad 1 sarebbe più inefficiente in quanto ripetuto due volte. I dati sono ordinati quando non si effettuano scambi tra valori durante tutta la scansione dell'array con intervallo 1.

[modifica] Pseudocode example of combsort11

function combsort11(array input)
    gap := input.size //initialize gap size
    
    loop until gap = 1 and swaps = 0
        //update the gap value for a next comb
        if gap > 1
            gap := gap / 1.3
            if gap = 10 or gap = 9
                gap := 11
            end if
        end if
        
i := 0 swaps := 0 //see bubblesort for an explanation //a single "comb" over the input list loop until i + gap >= array.size if array[i] > array[i+gap] swap(array[i], array[i+gap]) swaps := swaps + 1 end if i := i + 1 end loop end loop end function

[modifica] Voci correlate

  • Bubble sort, L'algoritmo base del comb sort
  • Cocktail sort, o bubble sort bidirezionale, è una variazione che riesce a disperdere velocemente le tartarughe.

[modifica] Collegamenti esterni


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -