Anda di halaman 1dari 11

UNIVERSITAS ISLAM NEGERI No. Dok.

: FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN

Jurusan/Prodi : Teknik Informatika Hari/Tanggal : Kamis, 28 April 2016


Mata Kuliah : Analisa Algoritma Waktu : 13.00 – 14.30
Bobot SKS : 3 SKS................ Jenis Ujian : UTS/UAS/4B
Semester/Tahun : .VI-Genap/ 2015-2016 Dosen : A.Hanifa S.MSi

No Bobot
Pertanyaan
. Nilai

I. SOAL

1.Tunjukkan bahwa (n+b)b =  (nb), untuk setiap bilangan konstan real a dan b, b>0.

2.Buktikan bahwa running time dari suatu algoritma adalah (g(n)) jika dan hanya
jika worstcase running time-nya adalah O(g(n)) dan bestcase running time-nya
adalah (g(n)).

3.Tunjukkan bahwa solusi dari T(n) = T(n/2) + 1 adalah O(lg n)

4.Tunjukkan bahwa solusi dari T(n) = 2T( n/2 + 17) + n adalah (n lg n)

5.Gambarlah recursion tree untuk T(n) = 4T( n/2) + n dan buktikan bahwa batas
asimtotik ketat (tight asymptotic bounds) adalah solusinya.

6.Gunakan iterasi untuk menyelesaikan rekurensi T(n) = T(n-a) + T(a) + n , dimana a


 1 dan konstan

7.Gunakan metode master untuk menentukan batas-batas asimtotik ketat dari


rekurensi berikut:
a.T(n) = 4T(n/2) + n
b.T(n) = 4T(n/2) + n2
c.T(n) = 4T(n/2) + n3
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN

II. SOAL KASUS : A

Jelaskan secara manual contoh proses Heap Sort dibawah ini, Buatlah Flowchartnya
sesuai dengan pseudocode yang ada serta implementasi source codenya!,. Berikan
contoh kasus penggunaan Algoritma Heap Sort?
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN

. SOURCE CODE HEAPSORT

1. /*
2.  * C++ Program to Implement Heap Sort
3.  */
4. #include <iostream>
5. #include <conio.h>
6. using namespace std;
7. void max_heapify(int *a, int i, int n)
8. {
9. int j, temp;
10. temp = a[i];
11. j = 2*i;
12. while (j <= n)
13. {
14. if (j < n && a[j+1] > a[j])
15. j = j+1;
16. if (temp > a[j])
17. break;
18. else if (temp <= a[j])
19. {
20. a[j/2] = a[j];
21. j = 2*j;
22. }
23. }
24. a[j/2] = temp;
25. return;
26. }
27. void heapsort(int *a, int n)
28. {
29. int i, temp;
30. for (i = n; i >= 2; i--)
31. {
32. temp = a[i];
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN
33. a[i] = a[1];
34. a[1] = temp;
35. max_heapify(a, 1, i - 1);
36. }
37. }
38. void build_maxheap(int *a, int n)
39. {
40. int i;
41. for(i = n/2; i >= 1; i--)
42. {
43. max_heapify(a, i, n);
44. }
45. }
46. int main()
47. {
48. int n, i, x;
49. cout<<"enter no of elements of array\n";
50. cin>>n;
51. int a[20];
52. for (i = 1; i <= n; i++)
53. {
54. cout<<"enter element"<<(i)<<endl;
55. cin>>a[i];
56. }
57. build_maxheap(a,n);
58. heapsort(a, n);
59. cout<<"sorted output\n";
60. for (i = 1; i <= n; i++)
61. {
62. cout<<a[i]<<endl;
63. }
64. getch();
65. }

Jelaskan secara manual Algoritma Stressen Matrix Multiply dibawah ini, Buatlah
Flowchartnya sesuai dengan pseudocode yang ada serta implementasi source
codenya!,. Berikan contoh kasus penggunaan Algoritma Stressen?
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN

IV.

// Recursive matrix mult by strassen's method.


// 2013-Feb-15 Fri 11:47 by moshahmed/at/gmail.

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define M 2
#define N (1<<M)

typedef double datatype;


#define DATATYPE_FORMAT "%4.2g"
typedef datatype mat[N][N]; // mat[2**M,2**M] for divide and conquer
mult.
typedef struct { int ra, rb, ca, cb; } corners; // for tracking rows and
columns.
// A[ra..rb][ca..cb] .. the 4 corners of a matrix.

// set A[a] = I
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN
void identity(mat A, corners a){
int i,j;
for(i=a.ra;i<a.rb;i++)
for(j=a.ca;j<a.cb;j++)
A[i][j] = (datatype) (i==j);
}

// set A[a] = k
void set(mat A, corners a, datatype k){
int i,j;
for(i=a.ra;i<a.rb;i++)
for(j=a.ca;j<a.cb;j++)
A[i][j] = k;
}

// set A[a] = [random(l..h)].


void randk(mat A, corners a, double l, double h){
int i,j;
for(i=a.ra;i<a.rb;i++)
for(j=a.ca;j<a.cb;j++)
A[i][j] = (datatype) (l + (h-l) * (rand()/(double)RAND_MAX));
}

// Print A[a]
void print(mat A, corners a, char *name) {
int i,j;
printf("%s = {\n",name);
for(i=a.ra;i<a.rb;i++){
for(j=a.ca;j<a.cb;j++)
printf(DATATYPE_FORMAT ", ", A[i][j]);
printf("\n");
}
printf("}\n");
}

// C[c] = A[a] + B[b]


void add(mat A, mat B, mat C, corners a, corners b, corners c) {
int rd = a.rb - a.ra;
int cd = a.cb - a.ca;
int i,j;
for(i = 0; i<rd; i++ ){
for(j = 0; j<cd; j++ ){
C[i+c.ra][j+c.ca] = A[i+a.ra][j+a.ca] + B[i+b.ra][j+b.ca];
}
}
}

// C[c] = A[a] - B[b]


void sub(mat A, mat B, mat C, corners a, corners b, corners c) {
int rd = a.rb - a.ra;
int cd = a.cb - a.ca;
int i,j;
for(i = 0; i<rd; i++ ){
for(j = 0; j<cd; j++ ){
C[i+c.ra][j+c.ca] = A[i+a.ra][j+a.ca] - B[i+b.ra][j+b.ca];
}
}
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN
}

// Return 1/4 of the matrix: top/bottom , left/right.


void find_corner(corners a, int i, int j, corners *b) {
int rm = a.ra + (a.rb - a.ra)/2 ;
int cm = a.ca + (a.cb - a.ca)/2 ;
*b = a;
if (i==0) b->rb = rm; // top rows
else b->ra = rm; // bot rows
if (j==0) b->cb = cm; // left cols
else b->ca = cm; // right cols
}

// Multiply: A[a] * B[b] => C[c], recursively.


void mul(mat A, mat B, mat C, corners a, corners b, corners c) {
corners aii[2][2], bii[2][2], cii[2][2], p;
mat P[7], S, T;
int i, j, m, n, k;

// Check: A[m n] * B[n k] = C[m k]


m = a.rb - a.ra; assert(m==(c.rb-c.ra));
n = a.cb - a.ca; assert(n==(b.rb-b.ra));
k = b.cb - b.ca; assert(k==(c.cb-c.ca));
assert(m>0);

if (n==1) {
C[c.ra][c.ca] += A[a.ra][a.ca] * B[b.ra][b.ca];
return;
}

// Create the 12 smaller matrix indexes:


// A00 A01 B00 B01 C00 C01
// A10 A11 B10 B11 C10 C11
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
find_corner(a, i, j, &aii[i][j]);
find_corner(b, i, j, &bii[i][j]);
find_corner(c, i, j, &cii[i][j]);
}
}

p.ra = p.ca = 0;
p.rb = p.cb = m/2;

#define LEN(A) (sizeof(A)/sizeof(A[0]))


for(i=0; i < LEN(P); i++) set(P[i], p, 0);

#define ST0 set(S,p,0); set(T,p,0)

// (A00 + A11) * (B00+B11) = S * T = P0


ST0;
add( A, A, S, aii[0][0], aii[1][1], p);
add( B, B, T, bii[0][0], bii[1][1], p);
mul( S, T, P[0], p, p, p);

// (A10 + A11) * B00 = S * B00 = P1


ST0;
add( A, A, S, aii[1][0], aii[1][1], p);
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN
mul( S, B, P[1], p, bii[0][0], p);

// A00 * (B01 - B11) = A00 * T = P2


ST0;
sub( B, B, T, bii[0][1], bii[1][1], p);
mul( A, T, P[2], aii[0][0], p, p);

// A11 * (B10 - B00) = A11 * T = P3


ST0;
sub(B, B, T, bii[1][0], bii[0][0], p);
mul(A, T, P[3], aii[1][1], p, p);

// (A00 + A01) * B11 = S * B11 = P4


ST0;
add(A, A, S, aii[0][0], aii[0][1], p);
mul(S, B, P[4], p, bii[1][1], p);

// (A10 - A00) * (B00 + B01) = S * T = P5


ST0;
sub(A, A, S, aii[1][0], aii[0][0], p);
add(B, B, T, bii[0][0], bii[0][1], p);
mul(S, T, P[5], p, p, p);

// (A01 - A11) * (B10 + B11) = S * T = P6


ST0;
sub(A, A, S, aii[0][1], aii[1][1], p);
add(B, B, T, bii[1][0], bii[1][1], p);
mul(S, T, P[6], p, p, p);

// P0 + P3 - P4 + P6 = S - P4 + P6 = T + P6 = C00
add(P[0], P[3], S, p, p, p);
sub(S, P[4], T, p, p, p);
add(T, P[6], C, p, p, cii[0][0]);

// P2 + P4 = C01
add(P[2], P[4], C, p, p, cii[0][1]);

// P1 + P3 = C10
add(P[1], P[3], C, p, p, cii[1][0]);

// P0 + P2 - P1 + P5 = S - P1 + P5 = T + P5 = C11
add(P[0], P[2], S, p, p, p);
sub(S, P[1], T, p, p, p);
add(T, P[5], C, p, p, cii[1][1]);

}
int main() {
mat A, B, C;
corners ai = {0,N,0,N};
corners bi = {0,N,0,N};
corners ci = {0,N,0,N};
srand(time(0));
// identity(A,bi); identity(B,bi);
// set(A,ai,2); set(B,bi,2);
randk(A,ai, 0, 2); randk(B,bi, 0, 2);
print(A, ai, "A"); print(B, bi, "B");
set(C,ci,0);
// add(A,B,C, ai, bi, ci);
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN
mul(A,B,C, ai, bi, ci);
print(C, ci, "C");
return 0;
}

SOAL KASUS - B
V.
Contoh dan Jawaban Kasus 1 dibawah ini, Kemudian Jawab Soal Kasus 2
Kasus 1

Algoritma isi Matriks


procedure isi_matriks
kamus
matriks : array[1..3,1..3] of integer
a, b, i, j : integer
begin
x ←3
y ←3
for i ← 1 to x do
begin
for j ← 1 to y do
Algoritma
gotoXY(j*3+16,i*2+18)
read(matriks[i,j])
end
end
endprocedure
Mencari T(n)

C(n) COP

Read n A

:= n+3 B

* 2n C

+ 2n D

Tn=Cop+C(n)
Tn = na+(n+3)b+2nc+2nd
UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN

Kasus 2
Algoritma Menghitung Faktorial
procedure menghitung_faktorial
Kamus
x, a, faktorial : integer
Algoritma
read(x)
a←1
faktorial ← 1
while a <= x do
begin
faktorial ← faktorial * a
a ←a+1
end
write(Faktorial dari ,x, adalah : ,faktorial)
endprocedure
Mencari T(n)

Hitung penyelesaian 0/1 Knapsack Problem berikut dengan menggunakan Dynamic


Programming !, Implementasikan dengan Source Code dan Capture Hasil Output?

n = 7; W = 15; (w1, w2, w3, w4, w5, w6, w7) = (5, 7, 3, 6, 4, 3, 4); (b1, b2, b3, b4,
b5, b6, b7) = (34, 16, 21, 57, 32, 24, 15)
n = 8; W = 9; (w1, w2, w3, w4, w5, w6, w7) = (5, 2, 3, 2, 6, 2, 4, 3); (b1, b2, b3, b4,
b5, b6, b7) = (32, 59, 30, 17, 81, 16, 39, 25)
VII
.

========Selamat Mengerjakan========

Keterangan: Soal dapat berbentuk pilihan ganda dan atau uraian


UNIVERSITAS ISLAM NEGERI No. Dok. : FST-AKM-FR-019

SYARIF HIDAYATULLAH JAKARTA Tgl. Terbit : 1 Maret 2012


FORM (FR) No. Revisi: : 00
FAKULTAS SAINS DAN TEKNOLOGI
Jl. Ir. H. Juanda No 95 Ciputat 15412 Indonesia
Hal : 1/1
SOAL UJIAN

Anda mungkin juga menyukai