Anda di halaman 1dari 42

algoritmika

Pelatihan OSK 2015


.
Rakha Kanz Kautsar
February 9, 2015

.review pascal

basic structure

program x;
var
{Deklarasi variabel}
i,j,k : integer;
const
{Deklarasi konstanta}
PI = 3.1415;
procedure p(str:ansistring);
begin
{Isi prosedur}
end;
function f(x:integer):integer;
begin
{Isi fungsi}
end;
begin
{Isi program utama}
end.

conditional

if {conditional} then begin


{do something}
end;

conditional

if {conditional} then begin


{do something}
end else begin
{do something else}
end;

conditional

if {conditional} then begin


{do something}
end else if {another conditional} then begin
{do something else}
end else begin
{if all fails, do something}
end;

loop

while {conditional} do begin


{do something while true}
end;

loop

repeat
{do something until true}
until {conditional};

loop

for {variable}:={begin value}


to {end value} do begin
{do something with the variable}
end;

loop

for i:=1 to 10 do begin


writeln(i);
end;
for i:=10 downto 1 do begin
writeln(i);
end;

contoh soal

Apa keluaran dari program berikut?


p:=true;
q:=false;
if (p=false or 3 mod 2 = 1) and (q=true and 1=1) then
writeln(A)
else
writeln(B);
end;

10

contoh soal

Apa keluaran dari program berikut?


n:=3;
for i:=1 to n do begin
for j:=1 to j do begin
if(i<j) then write(.)
else write(#);
end;
writeln;
end;

10

tipe data

Tipe
byte
shortint
smallint
word
integer
cardinal
longint
int64
qword

Range
0..255
-128..127
-32.768..32.767
0..65.535
smallint or longint
longword
-2147483648..2147483647
-9223372036854775808..9223372036854775807
0..18446744073709551615
11

.beberapa algoritma penting

swapping

procedure swap(var x,y:integer);


var tmp;
begin
tmp:=x;
x:=y;
y:=x;
end;

13

swapping

procedure swap(var x,y:integer);


begin
x:=x+y;
y:=x-y;
x:=x-y;
end;

13

swapping

procedure swap(var x,y:integer);


begin
x:=x xor y;
y:=x xor y;
x:=x xor y;
end;

13

euclidean algorithm

gcd(a, b) =

a,

if b = 0.

gcd(b, a mod b),

otherwise.

14

euclidean algorithm

function gcd(a,b:integer):integer;
begin
if b=0 then gcd:=a
else gcd:=gcd(b,a mod b);
end;

14

sieve of eratosthenes

// p adalah array [1..MAX] of boolean


// berisi default true.
for i:=2 to MAX do begin
if p[i] then
for j:=i*i to MAX do p[j]:=false;
end;
// i bilangan prima iff p[i]=true.

15

fast exponentiation

b =

1,

e
2

if e = 0
e
2

b b ,

b be1 ,

if even.
if odd.

16

fast exponentiation

function pangkat(b,e:integer):longint;
var
tmp:longint;
begin
if e=0 then pangkat:=1
else if (e mod 2 = 1) then
pangkat:=b*pangkat(e-1)
else begin
tmp:=pangkat(e div 2);
pangkat:=tmp*tmp;
end;
end;
16

fast exponentiation

function pangkat(b,e:longint):longint;
var
res:longint;
begin
while e>0 do begin
if (e mod 2 = 1) then
res *= b;
e := e div 2;
b := b * b;
end;
pangkat := res;
end;

16

flood fill (dfs)

procedure dfs(x,y:integer);
begin
if safe(x,y) then begin
visited[x,y]:=true;
// Process..
dfs(x,y+1);
dfs(x,y-1);
dfs(x+1,y);
dfs(x-1,y);
end;
end;
17

.rekursi

factorial

function factorial(x:integer):longint;
begin
if x<2 then factorial:=x
else factorial:= x * factorial(x-1);
end;

19

fibonacci

function fib(n:integer):longint;
begin
if n<2 then fib:=1
else fib:=fib(n-1)-fib(n-2);
end;

20

struktur umum

function f(parameter):return_value;
begin
if ... then f:=base_case
else f:= f() //recurse ;
end;

21

approach

function sikat(x,y:longint):longint;
begin
if (x>=y) then sikat:=x
else sikat:=3*sikat(x+1,y)+2*sikat(x,y-1);
end;

22

approach

function sikat(x,y:longint):longint;
begin
if (x>=y) then sikat:=x
else sikat:=3*sikat(x+1,y)+2*sikat(x,y-1);
end;
1. Pohon Faktor

22

approach

function sikat(x,y:longint):longint;
begin
if (x>=y) then sikat:=x
else sikat:=3*sikat(x+1,y)+2*sikat(x,y-1);
end;
1. Pohon Faktor
2. Tabel DP

22

approach

function sikat(x,y:longint):longint;
begin
if (x>=y) then sikat:=x
else sikat:=3*sikat(x+1,y)+2*sikat(x,y-1);
end;
1. Pohon Faktor
2. Tabel DP
3. Khusus

22

approach

var
data :
array[1..10] of integer =
(3,9,2,6,1,4,7,8,5,10);
procedure kambing(m : integer);
begin
if (m<=10) then
begin
kambing(m*2);
write(data[m], );
kambing(m*2+1);
end;
end;

Hasil pemanggilan kambing(1) adalah...


23

.sorting

bubble sort

swapped:=true;
repeat
swapped:=false;
for i:=2 to n do begin
if A[i]>A[i-1] then begin
swap(A[i],A[i-1]);
swapped:=true;
end;
end;
n:=n-1;
until swapped=false;
25

selection sort

for i:=1 to n do begin


idx_min:=i;
for j:=i+1 to n do begin
if A[j]<A[idx_min] then
idx_min:=j;
end;
swap(A[i],A[idx_min]);
end;

26

insertion sort

for i:=2 to n do begin


for j:=i downto 2 do begin
if A[j]>A[j-1] then break
else swap(A[j],A[j-1]);
end;
end;

27

and other sort

Merge Sort

28

and other sort

Merge Sort
Heap Sort

28

and other sort

Merge Sort
Heap Sort
Quick Sort

28

and other sort

Merge Sort
Heap Sort
Quick Sort
Topological Sort

28

fin.

29

Anda mungkin juga menyukai