Citat:
Ursprungligen postat av
WbZV
Bubbelsorten kommer definitivt att dra mer ström med 128 processorer. Vilket i sig kan vara skönt en kall vinterdag.
Bubbelsort är T(n^2). Mergesort, heapsort och quicksort är T(n*log n).
Vid drygt 1000 element går vår perfekt parallelliserade bubbelsort på 128 processorer lika fort som en mergesort/heapsort/quicksort på en processor. Vid 1000000 element går mergesort/heapsort/quicksort ungefär 400 gånger fortare trots parallelliseringen.
Såklart detta kan var skönt med mera värme, Vi måste ju underhålla klimateffekten så vi har ngt att göra i framtiden,
-- Ja dessa uppskattningar av sorteringstid är ju utefter worst case scenario, om datasettet redan är delvis sorterat så kan utfallet bli ett annat. Tack för synpunkterna, väl formulerade så, som sagt är bubblesort en usel lösning när volymen börjar bli stor.
Citat:
Ursprungligen postat av
WbZV
Tyvärr skalar det inte linjärt, vilket du själv tycks ha upptäckt. En sortering skyfflar mycket minne och kommer att vara bussbegränsad, om inte jämförelseoperatorn är oerhört beräkningstung. Men då gör vi antagligen något annat fel.
Jämförelseoperatorn bör inte vara beräkningstung, jag tycker det lutar mycket riktigt åt ett designfel om den är så, bättre i såfall att skapa ett tillfälligt "viktvärde" som redan är förberäknat, så det inte behöver beräknas för varje jämförelse operation.
Om objekten är stora så är det mera lönsamt att sortera pekare till objekten för att slippa tidsödande memcpy operationer, precis så som du nämner om minnesbussen, först när datasetet är färdigsorterat så används pekarna till att bilda ett nytt sorterat dataset
dataset = lista, array, vektor etc
det finns ju annars datasets som inte anses vara sorterbara, tex färger, där relationsoperatorerna > < inte har någon mening Medans tex spelet sten, sax, påse har funktionella relationsoperatorer > <, men de blir ändå inte sorterbara,
tex sten > sax är sant osv..