Archive | May, 2013

Kriptografi enkripsi-dekripsi algoritma Goldreich-Goldwasser Halevi (GGH) Cryptosystem

24 May

Salah satu aspek penting dalam kriptografi adalah menjamin kerahasiaan (confidentiality) suatu pesan. Untuk menjamin bahwa suatu pesan hanya dibaca oleh pihak-pihak yang berkepentingan saja, perlu dilakukan proses enkripsi-dekripsi terhadap pesan tersebut. Enkripsi merupakan proses mengubah teks pesan menjadi teks pesan baru yang tidak mudah dikenali lagi makna aslinya (ciphertext). Dekripsi adalah proses menerjemahkan ciphertext menjadi teks pesan awal.

Teknik Enkripsi-Dekripsi
Dalam kriptografi, terdapat beberapa jenis teknik enkripsi-dekripsi yang dapat digunakan. Pada tugas ini, teknik enkripsi-dekripsi yang digunakan adalah block cipher. Dalam block cipher, teks pesan akan dipotong menjadi beberapa block sebesar n karakter. Setiap block yang terbentuk akan dienkrip dengan suatu algoritma tertentu menggunakan key yang telah dibuat. Kemudian untuk setiap block yang telah dienkrip, digabungkan secara terurut menjadi sebuah ciphertext.
Tidak jauh berbeda dengan proses enkripsi, proses dekripsi dalam block cipher juga akan memotong ciphertext ke dalam block dengan ukuran yang sama ketika proses enkripsi. Setiap block didekrip dengan suatu algoritma menggunakan sebuah key. Teks pesan awal akan terbentuk setelah hasil dekripsi dari setiap block digabung.

Algoritma Enkripsi-Dekripsi Goldreich-Goldwasser Halevi (GGH) Cryptosystem

Dalam menggunakan algoritma GGH, pesan tidak bisa langsung dienkrip. Pesan yang memiliki tipe string perlu diubah ke dalam nilai ASCII-nya (encoding) dan dienkrip dengan teknik enkripsi block cipher sebesar n, dan  pada kesempatan ini coba dijelaskan untuk n = 20. Begitu juga dengan proses dekripsi, hasil enkripsi didekrip dengan teknik yang sama, block cipher dengan n = 20. Hasil dekripsi merupakan ASCII dari teks pesan awal, sehingga perlu dilakukan proses decoding dari ASCII ke karakter.

Berikut algoritma Goldreich-Goldwasser Halevi (GGH) Cryptosystem dalam Class GGHAlgorithm:


import java.util.Random;

/**

*/
/**
 Class GGHAlgorithm
 Menyediakan method-method untuk menjalankan proses enkripsi-dekripsi
 GGH cryptosystem (yang disederhanakan). Menggunakan bantuan class
 LUDecomposition untuk menyelesaikan sistem persamaan pada proses dekripsi.
 @author Ikhsanul Habibie
*/

public class GGHAlgorithm {
/* ------------------------
 Class variables
 * ------------------------ */

 /**
 private key dengan dimensi 20 dengan range nilai -200 s/d 200
 Hadamard ratio sekitar 0.8
 */
 private double[][] privateKey = {
 {17, -6, 2, -1, -7, -2, -8, -7, 1, -3, 0, 6, -4, -3, 2, 3, -1, -7, -7, 0},
 {0, -21, 21, -7, 12, -1, -1, 10, -5, -5, 0, 7, 11, -12, -2, 7, -19, 8, -8, 2},
 {0, -13, -26, 0, 11, -25, -5, 22, -27, -5, -25, 16, 13, 12, 2, -17, -15, 5, 14, -8},
 {0, -1, -2, -9, 54, 6, 9, 6, -13, -13, -3, 0, -21, 18, -21, 21, -10, -16, 21, 22},
 {0, 9, 18, 8, 9, -54, 23, 16, -15, -32, 2, 9, 8, 22, 1, 9, -22, 11, 7, 35},
 {0, -4, -8, -28, -4, 24, 32, -6, 8, -4, 4, -7, -9, 4, -7, -1, 22, 9, 17, 10},
 {0, 0, 0, 3, 0, 0, 3, 7, -48, 36, 22, 2, -25, 0, 0, -26, 37, -16, 31, -5},
 {0, 0, 0, 17, 0, 0, 17, -3, -22, 7, 18, 52, -23, 7, -12, 31, -15, 6, -16, 11},
 {0, 0, 0, 1, 0, 0, 1, -3, -34, 19, -11, -1, 2, -6, -14, 4, 19, -31, -63, -23},
 {0, 0, 0, 13, 0, 0, 13, -35, 10, -18, -3, -13, 4, -26, -11, -4, 2, 21, 4, 2},
 {0, 0, 0, -12, 0, 0, -12, 8, 21, 1, -49, 12, 28, -4, 20, 2, 6, -8, 19, 13},
 {0, 0, 0, 12, 0, 0, 12, -18, 15, 45, 33, -12, 18, 1, -10, -15, -7, -8, 4, -25},
 {0, 0, 0, 16, 0, 0, 16, 16, 0, 0, -16, -16, 8, 24, -17, 8, 23, 17, 9, 14},
 {0, 0, 0, 12, 0, 0, 12, 12, 0, 0, -12, -12, -33, -40, 22, 23, -21, 4, 19, -1},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 48, -17, 43, 9, 20, -12, -8},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 48, 4, -12, -6, -30, -12},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 43, -23, 22, 1, -24},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, -15, -40, -16},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, -62, -28},
 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195}
 };

 /* ------------------------
 Constructor
 * ------------------------ */
 public GGHAlgorithm() {

 }

 /** Mengakses privateKey
 @return private key
 */
 public double[][] getPrivateKey() {
 return this.privateKey;
 }

 /** Memberi nilai pada privateKey
 @param privateKey matriks 20x20 yang ingin dijadikan private key
 */
 public void setPrivateKey(double[][] privateKey){
 this.privateKey = privateKey;
 }

 /** Membuat <a class="zem_slink" title="Public-key cryptography" href="http://en.wikipedia.org/wiki/Public-key_cryptography" target="_blank" rel="wikipedia">public key</a>
 @param g private key
 @param imax range nilai public key (imax, berarti antara -imax s/d imax, inclusive)
 @param hrat batas atas hadamard ratio untuk public key yang ingin dibuat
 @return public key
 */
 public double[][] generatePublicKey(double[][] g, int imax, double hrat)
 {
 LUDecomposition copyarray = new LUDecomposition();
 double[][] b = copyarray.array2DCopy(g);
 int dim = b.length;
 double[][] v = new double[dim][dim];

 //CONSTRUCT StrassensAlgorithm OBJECT
 StrassensAlgorithm multiply = new StrassensAlgorithm();

 //randomunimodmatrix
 double[][] u = this.generateUnimodularMatrix(dim,imax);

 while(this.hadamardRatio(b) > hrat)
 {
 //B = G*U
 //USING STRASSENS
 b = multiply.strassenMatrixMulti(g,u);

//generate randomunimodmatrix, save to V
 v = this.generateUnimodularMatrix(dim,imax);

 //U = U*V
 //USING STRASSENS
 u = multiply.strassenMatrixMulti(u,v);
 }

 return b;
 }

 /** Mendapatkan public key, menggunakan generatePublicKey untuk membuat public key
 @param privateKey private key
 @return public key
 */
 public double[][] getPublicKey(double[][] privateKey){
 //hadamard ratio of 0.5 is already "bad"
 return this.generatePublicKey(privateKey,200,0.5);
 }

 /** Melakukan proses enkripsi sesuai langkah-langkah pada GGH cryptosystem
 @param blockAscii array yang berisi bagian pesan yang ingin di-enkripsi
 @param publicKey public key
 @return array hasil enkripsi
 */
 public double[] encryptGGH(double[] blockAscii, double[][] publicKey){
 double[] cipherMatrix = new double[blockAscii.length];

 double[] perturbationVector, multMatrix;
 perturbationVector = this.generatePerturbationVector(publicKey.length);
 multMatrix = this.matrixVectorMul(publicKey, blockAscii);

 for(int j = 0; j < multMatrix.length; j++){
 cipherMatrix[j] = multMatrix[j] + perturbationVector[j];
 }

 return cipherMatrix;
 }

/** Melakukan proses dekripsi sesuai langkah-langkah pada GGH cryptosystem
 @param privateKey private key
 @param publicKey public key
 @param cipherText array yang berisi cipher text
 @return array hasil dekripsi
 */
 public double[] decryptGGH(double[][] privateKey, double[][] publicKey, double[] cipherText) {

 //CONSTRUCTING OBJECT FROM LUDecomposition
 LUDecomposition priv = new LUDecomposition(privateKey);

 //SOLVE (privateKey)(cipherLinearCombination) = (cipherText)
 double[] cipherLinearCombination = priv.solveLSE(cipherText);

double[] closestVertex = babaiClosestVertexAlgorithm(
 cipherLinearCombination, privateKey);

//CONSTRUCTING OBJECT FROM LUDecomposition
 LUDecomposition pub = new LUDecomposition(publicKey);

 //SOLVE (publicKey)x = (privateKey*closestVertex)
 return pub.solveLSE(matrixVectorMul(privateKey, closestVertex));
 }

/** Membuat matriks dimensi dimxdim yang diisi dengan integer (random)
 @param imax nilai maksimum elemen matriks
 @param dim dimensi matriks persegi
 @return matriks dimxdim
 */
 public double[][] randomMatrix(int imax, int dim)
 {
 double m[][] = new double[dim][dim];
 Random random = new Random();

for(int i = 0; i < dim; i++) {
 for(int j = 0; j < dim; j++) {
 m[i][j] = (double)(random.nextInt(imax - 1) + 1);
 }
 }

//System.out.println("in randomMatrix");
 //this.printMatrix(m);

return m;
 }

 /** Implementasi proses derangement
 @param n ukuran array (jumlah posisi yang ingin dipermutasi)
 @return array hasil derangement
 */
 public int[] derangement(int n)
 {
 int m[] = new int[n];

for(int i = 0; i < n; i++) {
 m[i] = i;
 }

return this.randperm(m);
 }

 /** Membantu proses derangement, permutasi dimana di hasil akhir tidak ada posisi isi array yg sama dengan posisi awal, e.g 1 != 1'
 @param a array yang ingin di-derangement
 @return array hasil dekripsi
 */
 public int[] randperm(int[] a)
 {
 int m[] = new int[a.length];

for(int i = 0; i < a.length; i++) {
 m[i] = a[i];
 }

Random random = new Random();

for(int i = 0; i < m.length; i++) {
 int rand = random.nextInt(a.length - 1) + 1;

while (rand == i) {
 rand = random.nextInt(a.length - 1) + 1;
 }

int temp = m[i];
 m[i] = m[rand];
 m[rand] = temp;
 }

return m;
 }

/** Membuat perturbation vector
 @param dim ukuran vektor
 @return perturbation vector
 */
 public double[] generatePerturbationVector(int dim) {
 double[] v = new double[dim];

for(int i = 0; i < dim; i++) {
 v[i] = Math.round((Math.random() * 10) - 5);
 }

while(vectorNorm(v) == 0) {
 for(int i = 0; i < dim; i++) {
 v[i] = Math.round((Math.random() * 10) - 5);
 }
 }

 /*
 System.out.println();
 System.out.println("perturbation Vector");
 for(int i = 0; i < dim; i++) {
 System.out.println(v[i]);
 }
 */
 //System.out.println("\nPerturbation Vector");
 //this.printVector(v);
 //System.out.println();
 return v;
 }

 /** Membuat matriks unimodular
 @param dim ukuran matriks, dimxdim
 @param intMax nilai maksimum matriks
 @return matriks unimodular
 */
 public double[][] generateUnimodularMatrix(int dim, int intMax)
 {

 double u[][] = new double[dim][dim];

double A[][] = this.randomMatrix(intMax, dim);
 double Atriangular[][] = new double[dim][dim];

for(int i = 0; i < dim; i++) {
 for(int j = 0; j < dim; j++) {
 if (i>j) {
 Atriangular[i][j] = (double)0;
 }
 else if (i == j) {
 Atriangular[i][j] = (double)1;
 }
 else {
 Atriangular[i][j] = (double)A[i][j];
 }
 }
 }

//System.out.println("in generateUnimodularMatrix, Atriangular:");
 //this.printMatrix(Atriangular);
 //System.out.println();

int p[] = this.derangement(dim);

//System.out.println("in generateUnimodularMatrix, derangement:");
 //this.printVector(p);
 //System.out.println();

for(int i = 0; i < dim; i++) {
 for(int j = 0; j < dim; j++) {
 u[j][i] = Atriangular[j][p[i]];
 }
 }

 //System.out.println("in generateUnimodularMatrix, final matrix:");
 //this.printMatrix(u);

return u;
 }

/** Operasi inner product antara dua vektor
 @param u vektor
 @param v vektor
 @return hasil inner product
 */
 public double innerProduct(double[] u, double[] v) {
 double w = 0;
 for(int i = 0; i < u.length; i++) {
 w += u[i] * v[i];
 }

return w;
 }

/** Perkalian skalar dengan vektor
 @param scalar skalar
 @param v vektor
 @return hasil perkalian skalar dengan vektor
 */
 public double[] scalarVectorMul(double scalar, double[] v) {
 for(int i = 0; i < v.length; i++) {
 v[i] += scalar * v[i];
 }

return v;
 }

/** Penjumlahan antara dua vektor
 @param u vektor
 @param v vektor
 @return vektor hasil penjumlahan
 */
 public double[] vectorAddition(double[] u, double[] v) {
 double[] newVector = new double[u.length];
 for(int i = 0; i < u.length; i++) {
 newVector[i] = u[i] + v[i];
 }

return newVector;
 }

/** Perkalian antara matriks dengan vektor (matriks * vektor = vektor)
 @param a matriks
 @param b vektor
 @return hasil perkalian (vektor)
 */
 public double[] matrixVectorMul(double a[][], double b[]) {
 double c[] = new double[a.length];

for(int i = 0; i < a.length; i++) {
 for(int j = 0; j < b.length; j++) {
 c[i] += a[i][j] * b[j];
 }
 }

return c;
 }

/** Menghitung norm-2 sebuah vektor
 @param v vektor
 @return norm-2 vektor
 */
 public double vectorNorm(double[] v) {
 double norm = 0;

for(int i = 0; i < v.length; i++) {
 norm += Math.pow(v[i], 2);
 }

return Math.sqrt(norm);
 }

/** Meyelesaikan closest vertex problem (CVP) dengan algoritma Babai
 @param w vektor (jadi, solusi CVP adalah vektor terdekat dengan w)
 @param baseVectors matriks yang berisi basis
 @return solusi CVP
 */
 public double[] babaiClosestVertexAlgorithm(double[] w, double[][] baseVectors) {
 double wLinearCombination[] = new double[w.length];
 System.arraycopy(w, 0, wLinearCombination, 0, w.length);

for(int i = 0; i < w.length; i++) {
 wLinearCombination[i] = Math.round(wLinearCombination[i]);
 }

return wLinearCombination;
 }

/** Menghitung hadamard ratio dari key
 @param m matriks/key yang ingin dicari hadamard ratio-nya
 @return hadamard ratio
 */
 public double hadamardRatio(double m[][]) {
 LUDecomposition lu = new LUDecomposition(m);

double detL = Math.abs(lu.computeDeterminant());
 double[] firstVector = new double[m.length];

for(int i = 0; i < firstVector.length; i++) {
 firstVector[i] = m[i][0];
 }

double norms = vectorNorm(firstVector);

for(int i = 1; i < m.length; i++) {
 double baseVector[] = new double[m.length];

for(int j = 0; j < m.length; j++) {
 baseVector[j] = m[j][i];
 }

norms *= vectorNorm(baseVector);
 }
 return Math.pow(detL/norms, (double)1.0/m.length);
 }

/** Mencetak matriks ke output
 @param m matriks
 */
 public static void printMatrix(double m[][]) {
 for(int i = 0; i < m.length; i++) {
 for(int j = 0; j < m[0].length; j++) {
 System.out.print(m[i][j] + " |");
 }
 System.out.println();
 }
 }

 /** Mencetak vektor ke output (dengan isi elemen adalah integer)
 @param m vektor
 */
 public static void printVector(int[] m) {
 for(int i = 0; i < m.length; i++) {
 System.out.print(m[i] + " ");
 System.out.println();
 }
 }

 /** Mencetak vektor ke output (dengan isi elemen adalah double)
 @param m vektor
 */
 public static void printVector(double[] m) {
 for(int i = 0; i < m.length; i++) {
 System.out.print(m[i] + " ");
 System.out.println();
 }
 }
}

&nbsp;

Ada dua jenis key yang akan digunakan Class GGHAlgorithm melakukan proses enkripsi-dekripsi dengan implementasi algoritma GGH. Class ini juga berisi method-method yang dibutuhkan untuk melakukan proses enkripsi-dekripsi, terutama membuat private key dan public key. Berikut, yaitu private key (kunci rahasia) dan public key (kunci publik).

Ukuran dari private key (kunci rahasia) dan public key (kunci publik) adalah salah satu komponen penting dalam sistem kriptografi karena kedua key tersebut mendukung aspek kerahasiaan (confidentiality) dari suatu pesan yang ingin dikirim. Menurut teori, semakin besar ukuran key yang digunakan, maka keamanan sistem semakin meningkat.
Pembentukan public key dalam Goldreich-Goldwasser Halevi (GGH) cryptosystem menggunakan private key sebagai titik awal pembuatannya. Private key dikalikan dengan jenis matriks tertentu sedemikian sehingga terbentuklah public key yang sesuai dengan standar kriteria GGH cryptosystem. Seperti yang sudah dijelaskan sebelumnya, untuk menjamin kualitas keamanan sistem, key yang digunakan harus cukup besar. Berdasarkan sumber [1], ukuran key setidaknya mencapai ratusan. Bayangkan jika Anda menggunakan teknik perkalian matriks standar yang mempunyai kompleksitas Θ(n^3) untuk key yang mempunyai ukuran 400 ke atas, maka teknik perkalian matriks tersebut tidak layak digunakan pada implementasi GGH cryptosystem. Oleh karena itu, perlu adanya metode alternatif untuk mengalikan matriks, salah satunya adalah Strassen’s Algorithm.

Contoh Skema Relational Diagram dan Relational Algebra pada basis data

24 May

Kasus relational diagram:
Avia Corp adalah maskapai yang fokus pada penyewaan pesawat untuk individu/perusahaan. Avia Corp mencatat keterangan mengenai semua penerbangan yang pernah dilakukannya pada tabel CHARTER. Pada tabel CHARTER ini, terdapat keterangan mengenai setiap penerbangan, seperti: Char_Trip(ID penerbangan), tanggal penerbangan, nomor pesawat (Aircraft number/Ac_Num), tujuan, jarak, lama penerbangan (char_hours_flown), jumlah bahan bakar yang dihabiskan (Char_Fuel_Gallons), dan kode customer yang menyewanya.

Setiap penerbangan dicatat id pilot (emp_num) yang menerbangkannya pada tabel TRIP. Tabel AIRCRAFT menyimpan data tentang nomor pesawat (Ac_Num), dan Kode Model (Mod_Code).

Tabel Model mencatat data mengenai model pesawat, yaitu: Kode Model (Mod_Code), Pembuat Model (Mod_Manufacturer), Nama Model (Mod_Name), Jumlah kursi pada model tersebut (Mod_Seat), dan biaya yang dikeluarkan untuk penggunaan model tersebut per mil (Mod_Charge Per Mile). Untuk setiap model pesawat bisa terdapat lebih dari 1 nomor pesawat, misalnya Avia Corp memiliki pesawat model Boeing747 sebanyak 2 buah dengan nomor AV256 dan AV239.

Data tentang pelanggan terdapat di tabel CUSTOMER yang mencakup informasi mengenai kode pelanggan, nama, inisial, dan telepon.

Data karyawan disimpan pada tabel EMPLOYEE, yang mencakup atribut: nomor/id karyawan, nama, dan inisial. Pilot merupakan bagian dari Employee. Data mengenai Pilot terdapat pada tabel PILOT mencakup id employee (emp_num), dan kode ijin terbang(pil_license). Karyawan bisa memiliki rating yang memiliki kode, nama rating dan tanggal dikeluarkan. Informasi ini terdapat pada tabel EARNEDRATING dan RATING.

Berikut adalah skema relational dari basis data maskapai penerbangan Avia Corp.

relational diagram 1 relational diagram 2

Relational algebra yang bisa kita cari:

1. Tampilkan daftar initial dari karyawan yang memiliki rating bernama “Certified Flight Instructor”?

relational algebra 1

2. Tampilkan lastname dari pilot yang memiliki license “ATP” dan Kode Rating “CFII”?

relational algebra 2

3. Tampilkan nomor telepon dari customer yang sudah pernah menyewa pesawat yang memiliki model dengan nama “King Air”.

relational algebra 3

4. Tampilkan firstname, lastname, dan nomor telepon dari customer yang belum pernah menyewa pesawat dari maskapai Avia Corp ini.

relational algebra 4

5. Tampilkan firstname dan lastname dari pilot yang sudah pernah menerbangkan semua model pesawat.

relational algebra 5

6. Tampilkan lastname dan firstname pilot yang jam terbangnya sudah lebih dari 100 jam

relational algebra 6

7. Dapatkan lastname dan firstname dari karyawan yang juga merupakan customer/sudah pernah menyewa pesawat.

relational algebra 7

8. Tampilkan lastname dari customer yang sudah pernah menyewa pesawat ke semua tujuan yang pernah disinggahi pesawat milik Avia Corp.

relational algebra 8

9. Berapakah total jarak tempuh yang telah ditempuh setiap pilot?

relational algebra 9

10. Berapakah jumlah penumpang yang telah diangkut oleh setiap pesawat (asumsi semua kursi pesawat terisi untuk setiap penerbangan)?

relational algebra 10

 

Demikianlah pembahasan skema relational dan penggunaan relational algebra dalam struktur data. Semoga bermanfaat!

Contoh solusi penggunaan Master Theorem atau Metode Master untuk rekurensi

23 May

Teorema 1 (Metode Master) Diberikan suatu rekurensi T (n) = aT (n/b) + f (n) , jika n ≥ n0, untuk suatu n0 elemen N dan T (n) konstan untuk 0 ≤  n < n0. Apabila a ≥ 1, b > 1 keduanya adalah nilai yang konstan dan f (n) adalah fungsi yang asimtotik positif, maka:

master theorem

Gunakan Teorema 1 untuk mencari solusi dari setiap rekurensi berikut dalam notasi . Jika metode master tidak dapat diterapkan, gunakan metode lain yang Anda ketahui. Asumsikan bahwa T (n) konstan untuk n yang cukup kecil.

(a).  T (n) = 3T (n/2) + n.

Solusi T (n) = 3T (n/2) + n menggunakan master theorem kasus 1.

solusi master theorem 1

(b). T (n) = 2T (n/2) + n^3.

Solusi T (n) = 2T (n/2) + n^3 menggunakan master theorem kasus 3.

solusi master theorem 2

(c). T (n) = 7T (n/3) + n^2.

Solusi T (n) =  7T (n/3) + n^2 menggunakan master theorem kasus 3.solusi master theorem 3

(d).  T (n) = 2T (n/2) + n lg n.

Solusi T (n) =  2T (n/2) + n lg n menggunakan master theorem kasus 2.

solusi master theorem 4

(e). T (n) = 4T (n/2) + n^2 √n.

Solusi T (n) = 4T (n/2) + n^2 √n menggunakan master theorem kasus 3.

solusi master theorem 5

(f). T (n) = T (√n) + 1 (petunjuk: substitusikan n = 2^m).

Solusi T (n) = T (√n) + 1 menggunakan master theorem kasus 2.

solusi master theorem 6

 

(g). T (n) = 2T (n – 1) + 1 (asumsikan T (1) = 1).

Kita tidak dapat menggunakan master theorem untuk kasus ini. Dengan evaluasi iteratif, kita memiliki

solusi master theorem 7

 

(h). T (n) = T (n – 1) + lg n (asumsikan T (1) = 1).

Dengan evaluasi iteratif, kita memiliki

solusi master theorem 8-1

Dengan sifat logaritma lg a + lg b = lg ab, diperoleh

solusi master theorem 8-2

Dengan aproksimasi Stirling,  lg (n!) = Θ(n lg n). Akibatnya T (n) = 1 +Θ (n lg n) = Θ(n lg n)

(i). T (n) = T (n – 2) + 2 lg n (asumsikan T (0) = 2).

Karena paritas (genap-ganjil) dari n tidak berpengaruh pada nilai T (n) secara asimtotik, kita boleh mengasumsikan n genap. Dengan evaluasi iteratif, kita memiliki

solusi master theorem 9-1 solusi master theorem 9-2

(j). T (n) = √n T (√n) + 2013 n (petunjuk: misalkan T (n) = nS (n) dengan S (n) adalah fungsi yang asimtotik positif).

Misalkan T (n) = nS (n), maka T (√n) = √n S (√n). Akibatnya rekurensi pada soal setara dengan

solusi master theorem 10-1 solusi master theorem 10-2Demikianlah contoh penggunaan master theorem dalam masalah rekurensi, semoga bermanfaat!

 

Growth function question and solution

23 May

Misalkan f (n) dan g (n) keduanya adalah fungsi bernilai real yang asimtotik positif dengan domain N. Buktikan atau sangkal pernyataan-pernyataan berikut:

1). Jika f (n) = O(g (n)) maka 2^f(n) = O(2^g(n))

Solusi: Karena f (n) dan g (n) keduanya asimtotik positif, maka f (n), g (n) ≥ 0

Pernyataan salah. Karena jika kita pilih f (n) = 2n dan g (n) = n. Jelas bahwa 2n = O(n).
Akan tetapi tinjau bahwa

2^(2n) =(2^2)^n = 4^n ≠ O(2^n) .

Andaikan 4^n = O(2^n), maka kita memiliki

growth function

2). f (n) = θ(f (n/2))

Solusi: Karena f (n) dan g (n) keduanya asimtotik positif, maka f (n), g (n) ≥ 0

Pernyataan salah. Jika f (n) = θ(f (n/2)) maka haruslah f (n) = O(f (n/2)).  Jika kita pilih f (n) = 2^n. Akan dibuktikan bahwa 2^n ≠ O (2^(n/2))


Andaikan 2^n = O (2^(n/2)), maka kita memiliki

growth function2

 

Pengertian dan Komponen COSO Framework

21 May

Kepanjangan dari COSO adalah Committee of Sponsoring Organizations of the Treadway Commission. COSO ini dibuat oleh sektor swasta untuk menghindari tindak korupsi yang sering terjadi di Amerika pada tahun 1970-an. COSO terdiri atas 5 komponen:

1. Control environment

Tindakan atau kebijakan  manajemen yang mencerminkan sikap manajemen puncak secara keseluruhan dalam pengendalian manajemen. Yang termasuk dalam control environment:

– Integrity and ethical values (integritas dan nilai etika)
– Commitment to competence (komitmen terhadap kompetensi)
– Board of Directors and audit committee (dewan komisaris dan komite audit)
– Management’s philosophy and operating style (filosofi manajemen dan gaya mengelola operasi)
– Organizational structure (struktur organisasi)
– Human resource policies and procedures (kebijakan sumber daya manusia dan prosedurnya)
2. Risk assessment

Tindakan manajemen untuk mengidentifikasi, menganalisis risiko-risiko yang relevan dalam penyusunan laporan keuangan dan perusahaan secara umum. Yang termasuk dalam risk assessment:

Company-wide objectives (tujuan perusahaan secara keseluruhan)
Process-level objectives (tujuan di setiap tingkat proses)
Risk identification and analysis (indentifikasi risiko dan analisisnya)
Managing change (mengelola perubahan)
3. Control activities

Tindakan-tindakan yang diambil manajemen dalam rangka pengendalian intern. Yang termasuk control activities:

Policies and procedures (kebijakan dan prosedur)
Security (application and network) –> (keamanan dalam hal aplikasi dan jaringan)
Application change management (manajemen perubahan aplikasi)
Business continuity or backups (kelangsungan bisnis)
Outsourcing (memakai tenaga outsourcing)
4. Information and communication 

Tindakan untuk mencatat, memproses dan melaporkan transaksi yang sesuai untuk menjaga akuntablitas. Yang termasuk komponen ini adalah sebagai berikut.

Quality of information (kualitas informasi)
Effectiveness of communication (efektivitas komunikasi)
5. Monitoring

Peniilaian terhadap mutu pengendalian internal secara berkelanjutan maupun periodik untuk memastikan pengendalian internal telah berjalan dan telah dilakukan penyesuian yang diperlukan sesuai kondisi yang ada. Yang termasuk di dalam komponen ini, yakni:

On-going monitoring (pengawasan yang terus berlangsung)
Separate evaluations (evaluasi yang terpisah)
Reporting deficiencies (melaporkan kekurangan-kekurangan yang terjadi)

Pengertian dan Macam-macam Simbiosis

21 May

Halo semua 🙂

Di post kali ini, saya akan membahas mengenai simbiosis. Simbiosis adalah interaksi atau hubungan antara satu makhluk hidup dengan makhluk hidup lain di mana mereka hidup berdampingan. Simbiosis terbagi menjadi 3 jenis. yaitu:

1. Simbiosis mutualisme

Simbiosis mutualisme adalah interaksi antara kedua makhluk hidup di mana kedua makhluk hidup ini mendapatkan keuntungan. Contohnya:

– Hubungan antara burung jalak dan kerbau

Burung jalak menempel di tubuh kerbau dan memakan kutu-kutu yang ada di tubuh kerbau. Oleh karena itu, burung jalak mendapatkan keuntungan berupa makanan dan kerbau diuntungkan juga karena kutu-kutu yang mengganggu di tubuhnya dimakan oleh burung jalak.

– Ganggang hijau biru dan jamur

Simbiosis antara ganggang hijau biru dan jamur membentuk lumut kerak.

2. Simbiosis komensalisme

Simbiosis komensalisme adalah interaksi antara kedua makhluk hidup di mana satu makhluk hidup mendapatkan keuntungan, sedangkan makhluk hidup lainnya tidak dirugikan. Misalnya:

– Hubungan antara ikan badut dan anemon laut

Ikan badut bersembunyi di anemon laut bila ia terancam akan dimakan oleh mangsanya. Ikan badut tidak akan hidup lama jika ia tidak berlindung di anemon laut. Dalam hal ini, ikan badut mendapatkan keuntungan berupa perlindungan, tapi anemon laut tidak merasa dirugikan akan kehadiran ikan badut.

– Hubungan antara daun sirih dan inangnya

Tumbuhan daun sirih adalah tumbuhan yang merambat. Tumbuhan ini akan merambat ke tumbuhan lain (inang). Tumbuhan sirih mendapat keuntungan karena menumpang hidup di inangnya, sedangkan inangnya tidak dirugikan karena tumbuhan daun sirih tidak mengambil makanan dari inangnya.

3. Simbiosis parasitisme

Simbiosis parasitisme adalah interaksi antara kedua makhluk hidup di mana satu makhluk hidup mendapatkan keuntungan, sedangkan makhluk hidup lain mendapatkan kerugian. Contohnya:

– Hubungan antara kepala dan kutu rambut

Kutu rambut menghisap darah dari kepala manusia. Akibatnya, manusia mengalami gatal-gatal dan kulit kepala menjadi rusak karena menjadi tempat hidup kutu rambut. Kutu kepala mendapatkan keuntungan berupa makanan. Di sisi lain, manusia dirugikan karena kutu rambut mengambil makanan dari darah manusia.

– Hubungan antara tumbuhan tali putri dan inangnya

Tumbuhan tali putri yang tumbuhnya merambat menumpang hidup di inangnya. Tumbuhan ini mengambil makanan yang sudah difotosintesis tumbuhan inangnya. Oleh karena itu, tali putri mendapatkan keuntungan berupa makanan, sedangkan tumbuhan inangnya akan cepat mati karena makanannya selalu diserap oleh tali putri.

Sekian pembahasan kali ini. Semoga dapat dimengerti.

Perbedaan Hukum Publik dan Hukum Privat

21 May

Hai semua 🙂 Di post kali ini, saya akan mengemukakan perbedaan antara hukum publik dan hukum privat. Oke kita langsung aja ya ke topik pembahasan. Secara sederhana, hukum dibagi menjadi dua bentuk, yaitu hukum publik dan hukum privat.

Hukum Publik

Hukum publik mencakup peraturan-peraturan hukum yang mengatur kekuasaan dan wewenang negara, serta mengatur hubungan hukum antara anggota masyarakat dan negara. Yang termasuk dalam hukum publik antara lain:

1. Hukum Tata Negara

Hukum tata negara adalah hukum yang mengatur tentang negara, yaitu antara lain dasar pendirian, struktur kelembagaan, pembentukan lembaga-lembaga negara, hubungan hukum (hak dan kewajiban) antar lembaga negara, wilayah dan warga negara.

2. Hukum Pidana

Hukum yang mengatur tentang pelanggaran dan kejahatan terhadap kepentingan umum serta perbuatan mana diancam dengan hukuman yang merupakan suatu penderitaan atau siksaan.

Hukum Privat

Hukum privat mencakup peraturan-peraturan hukum yang mengatur tentang hubungan antara individu dalam memenuhi keperluan hidupnya. Yang termasuk hukum privat antara lain:

1. Hukum Perdata

Rangkaian peraturan-peraturan hukum yang mengatur hubungan hukum antara orang yang satu dengan orang lain dengan menitikberatkan kepada kepentingan perseorangan.

2. Hukum Dagang

Peraturan yang mengatur hukum yang terkait dengan perdagangan.

Fungsi untuk menghitung bilangan faktorial di C

21 May

Pada kesempatan kali ini, saya mau sharing bagaimana cara kita membuat sebuah fungsi di bahasa pemrograman C yang berguna untuk mendapatkan hasil dari faktorial suatu bilangan. Tahukah kamu bilangan faktorial? Jadi bilangan faktorial itu seperti ini,contohnya jika kita nyatakan 5! itu sama dengan 5x4x3x2x1 = 120, untuk 4! = 4x3x2x1 = 24, dan lain sebagainya. Oke langsung saja:


#include <stdio.h>

int Faktorial (int N)
{
 if ( N==0){
 return 1;
 } else {
 return N * Faktorial (N-1);
 }
}

int main ()
{
 int bilangan;
 printf ("Masukkan bilangan yang akan dihitung : ");
 scanf ("%d", &bilangan);
 printf ("%d! = %d\n\n\n", bilangan, Faktorial (bilangan));
 return main ();
}

 

Fungsi di atas adalah fungsi rekursif yang berguna untuk mendapatkan hasil faktorial dari suatu bilangan. Selamat mencoba juga!

Update Repository pada Ubuntu 12.04 (Aka Precise Pangolin)

20 May

Repository Ubuntu adalah sebuah tempat yang berisikan ribuan software untuk operating system Ubuntu. Setiap software yang berada di repository telah di uji kompetibilitasnya untuk setiap versi Operating System Ubuntu. Dengan hadirnya repository membuat proses instalasi software menjadi lebih mudah didapatkan dan bisa dilakukan melalui koneksi internet.

Software yang barada di repository Ubuntu dibagi dalam empat area.

  1. Main, Software yang di support secara resmi oleh ubuntu.
  2. Restricted, Software yang di support oleh Ubuntu tetapi tidak sepenuhnya berlisensi gratis.
  3. Universe, Software yang dikembangkan dan dirawat oleh komunitas ubuntu
  4. Multiverse, Software yang tidak gratis

Banyak Server di internet yang menyedikan repository ubuntu, antara lain yang berada di Indonesia adalah di kambing.ui.ac.id yang beralamat server di Pusat Ilmu Komputer Universitas Indonesia Depok, 16424, INDONESIA – 152.118.24.30

Apabila komputer kita berada di Indonesia maka pilihan yang tepat adalah memilih repository ubuntu yang berada di Indonesia dengan alasan jarak yang lebih dekat sehingga akan semakin cepat downloadnya.

Secara default repository yang terpasang bukanlah repository lokal, oleh karena itu disini saya akan membahas bagaimana cara update ke repository lokal Indonesia. Berikut ini adalah langkah-langkahnya :

  1. Pertama buka Terminal/Console. Klik Menu => system => pilih konsole (terminal)
  2. Masuk ke root. ketik sudo su pada terminal, masukkan username dan password
  3. Ketik sudo kate /etc/apt/sources.list  maka akan muncul window seperti gambar inirepository lokal ubuntu
  4. Untuk pemula, diharapkan backup isi file sources.list ini ke notepad. Setelah itu, copy semua text dan ganti dengan repository lokal dibawah ini :
    Ubuntu Repository 12.04 di Kambing :
    deb http://kambing.ui.ac.id/ubuntu/ precise-proposed main restricted universe multiverse
    deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse
    deb http://kambing.ui.ac.id/ubuntu/ precise-updates main restricted universe multiverse
    deb http://kambing.ui.ac.id/ubuntu/ precise main restricted universe multiverse
    
    Ubuntu Repository 12.04 di UKDW :
    deb http://repo.ukdw.ac.id/ubuntu precise main restricted universe multiverse
    deb http://repo.ukdw.ac.id/ubuntu precise-updates main restricted universe multiverse
    deb http://repo.ukdw.ac.id/ubuntu precise-security main restricted universe multiverse
    deb http://repo.ukdw.ac.id/ubuntu precise-backports main restricted universe multiverse
    deb http://repo.ukdw.ac.id/ubuntu precise-proposed main restricted universe multiverse
    
    Ubuntu Repository 12.04 di Komo :
    deb http://komo.padinet.com/ubuntu/ precise-proposed main restricted universe multiverse
    deb http://komo.padinet.com/ubuntu/ precise-security main restricted universe multiverse
    deb http://komo.padinet.com/ubuntu/ precise-updates main restricted universe multiverse
    deb http://komo.padinet.com/ubuntu/ precise main restricted universe multiverse
    
    Ubuntu Repository 12.04 di ITB :
    deb ftp://ftp.itb.ac.id/pub/ubuntu/ precise-proposed main restricted universe multiverse
    deb ftp://ftp.itb.ac.id/pub/ubuntu/ precise-security main restricted universe multiverse
    deb ftp://ftp.itb.ac.id/pub/ubuntu/ precise-updates main restricted universe multiverse
    deb ftp://ftp.itb.ac.id/pub/ubuntu/ precise main restricted universe multiverse
  5. Langkah selanjutnya save file (Ctrl+S)
  6. Terakhir ketik pada terminal : sudo apt-get update untuk update repository.

Selesai, selamat download aplikasi (^_^)

Nonton Film di Command Prompt

20 May

Buat iseng-iseng berhadiah nih, jarang banget kan malah ga pernah nonton Film lewat command prompt. Wah seperti apa jadinya ya.. Penasaran?

Okey langsung aja, kreatif banget yg buat film ini hanya dengan menggunakan kode-kode ASCII

Caranya
1. Buka Telnet lewat command prompt. Run => ketik: cmd => ketik: telnet

Code:
 Code:

C:\Documents And Settings\User>telnet

2. Ketik o

Code:
Code:

Microsoft telnet>o

3. Ketik: towel.blinkenlights.nl

Code:
 Code:

Microsoft telnet>o
 < to > towel.blinkenlights.nl

Tunggu beberapa saat, nanti akan mucul tulisan dan film dimulai…
wkaakakakakaak

Selamat menyaksikan (^_^)