Quick Sort, a Insert Sort

Transkrypt

Quick Sort, a Insert Sort
Podstawowe algorytmy w asemblerze
Szymon Jagieła
Bartłomiej Rupik
Plan prezentacji
Wstęp
Proste algorytmy
1.
2.
1.
2.
3.
Zaawansowane algorytmy
3.
1.
2.
4.
Dane i tablice
Instrukcja if
Instrukcja while
Linked-list
Algorytmy sortowania
Podsumowanie
Wstęp

Głównym celem prezentacji jest przedstawienie
algorytmów, które mogę przyspieszyć działanie programu.

Zostaną porównane rozwiązania z C przedstawione w
kodzie assemblerowym, takie jak pętle, instrukcje
warunkowe oraz bardziej zaawansowane algorytmy, jak
lista oraz różne rodzaje sortowania
Przykład 1:
C:
int x;
char y, z[100];

Asm (NASM):
x
dw
y
db
z
db
Deklaracja
zmiennych
b – typ 8 bitowej zmiennej
w – typ 16 bitowej
zmiennej
1
1
100
dup (?)
dup (?)
dup (?)
Przykład 2 :
C:
y = x[i];

Asm:
mov
add
mov
mov
bx,offset x
bx,i
ax,[bx]
y,ax
Operowanie na
tablicach
Offset x – zwraca
przesunięcie danej, której
nazwę podamy w nawiasach

Przykład 3 :
C:
if(a cop b) {
//s1…
} else {
//s2…
}
Asm:
mov
cmp
cop
ax,a
ax,b
l1
s1…
jmp
l2
l1:
s2…
l2:
Instrukcje
warunkowe
cop – wszelkie operacje
warunkowe
s1,s2 – dowolny kod do
wykonania w instrukcji
warunkowej
Tabela operacji warunkowych dostępnych w
asemblerze
Mnemonik
Znaczenie
Warunek skoku
JC / JNC
Jump if Carry / if Not Carry
CF=1 / CF=0
JZ / JNZ
Jumf if Zero / if Not Zero
ZF=1 / ZF=0
JG
Jump if Greater (A>B)
ZF=0 oraz SF=OF
JE
Jump if Equal (A=B)
ZF=1
JGE
Jump if Greater or Equal (A>=B)
SF=OF
JL
Jump if Less (A<B)
SF<>OF
JLE
Jump if Less or Equal (A<=B)
ZF=1 lub SF<>OF
JA
Jump if Above
CF=0 oraz ZF=0
JAE
Jump if Above or Equal
CF=0
JB
Jump if Below
CF=1
JBE
Jump if Below or Equal
CF=1 lub ZF=1

Przykład 4 :
C:
while(a cop b) {
//s1…
Asm:
l1:
mov ax,a
cmp ax,b
cop l2
s1…
jmp l1
l2:
Pętla while
cop – wszelkie operacje
warunkowe
s1 – dowolny kod do
wykonania w pętli
Algorytmy sortowania


Insertion Sort – sortowanie przez wstawienie
Quick Sort
Insertion Sort + & 




Najprostszy algorytm sortowania
Złożoność czasowa n^2
Wydajny dla wstępnie posortowanych
Wydajny dla niewielkich zbiorów
Stabilny
Pseudokod
0. Insert_sort(A, n)
1.
2.
3.
4.
5.
6.
7.
for i=2 to n :
klucz = A[i]
j=i-1
while j>0 and A[j]>klucz:
A[j + 1] = A[j]
j=j-1
A[j+1] = klucz
Insertion Sort
Insertion Sort
DEMO TIME
Quick Sort


Popularny algorytm sortowania działający na zasadzie
dziel i zwyciężaj
Złożoność obliczeniowa n logn
Quick Sort - pseudokod
Quick Sort – How To
Quick Sort
DEMO TIME
Porównanie algorytmów sortowania
Insertion Sort w asm

Czas wykonania 1.203s
Insertion Sort w C/C++

Czas wykonania 1.03s
Porównanie algorytmów sortowania
Quick Sort w asm

Czas wykonania 0.015s
Quick Sort w C/C++



Korzystamy z funkcji
qsort()
Czas wykonania: 0.047s
Std:sort() wykonywał się
ponad 0.109s
Porównanie algorytmów sortowania
 Quick

Sort, a Insert Sort
dla tablicy składającej się z 20000 elementów (liczby typu int)
algorytm QuickSort jest znacznie szybszym rozwiązaniem.
Czas wykonania dla algorytmu przez wstawianie to ponad 1s!
Quick Sort tę samą tablicę sortuje w czasie 0.015s
Lista jednokierunkowa



Struktura danych służąca do reprezentacji zbiorów
dynamicznych.
Kolejne składniki struktury posiadają sekcję danych oraz
wskaźnik, przechowujący położenie początku kolejnej sekcji
danych w pamięci
Cecha charakterystyczna – bezpośredni dostęp posiadamy
tylko do pierwszego elementu
Lista jednokierunkowa
LAST DEMO TIME
Podsumowanie



W niniejszej przezentacji przedstawione zostały
podstawowe oraz popularne algorytmy
Dokonano ich porównania pomiędzy językami wysokiego
oraz językami poziomu maszynowego
W większości przypadków algorytmy napisane w
asemblerze wykonywały się działać szybciej niż ich
odpowiedniki w językach wyższego poziomu
Dziękujemy za uwagę