Selasa, 27 Desember 2016

Floyd Warshall dalam JAVA






package floydwarshall;
import java.util.Random;

public class Warshall {
int n=5;
int [][]dist=new int[n][n]; 


public static void main(String[]args) {
    Warshall xx=new Warshall();
    xx.play();

}

void play(){
    Warshall xx=new Warshall();
    int i, j,k;
for (i = 0; i < n; ++i){
for (j = 0; j < n; ++j){
dist[i][j]=xx.getRandomNumberInRange(1,9);
                        System.out.print(dist[i][j]+" ");
                }
                 System.out.println("");
        }
//xx.floyd_warshall();
//=================================================================
for (k = 0; k < n; ++k) {
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
/* If i and j are different nodes and if 
the paths between i and k and between
k and j exist, do */
if ((dist[i][k] * dist[k][j] != 0) && (i != j))
/* See if you can't get a shorter path
between i and j by interspacing
k somewhere along the current
path */
if ((dist[i][k] + dist[k][j] < dist[i][j]) ||(dist[i][j] == 0))
dist[i][j] = dist[i][k] + dist[k][j];
}
        
        
System.out.println("\n++++++++++++++++++++++++++++++++++++++++++");       
for (i = 0; i < n; ++i){
for (j = 0; j < n; ++j){
                        System.out.print(dist[i][j]+" ");
                }
                 System.out.println("");
        }

}


int getRandomNumberInRange(int min, int max) {
if (min >= max) {
throw new IllegalArgumentException("max must be greater than min");
}
Random r = new Random();
       
int c=r.nextInt((max - min) + 1) + min;
        return c;
}

}


nilai 1000 diasumsikan nilai tak hingga(~) yang berarti arah ke lokasi tsb tidak tersedia....


Download Source Code

Jumat, 23 Desember 2016

Java Code Unique Random


int[]arRandom ;
jumsoal=10;

 void bacaRandom(){
     arRandom = uniqueRandomArray(jumsoal);
        for(int i = 0; i<jd; i++){
            Log.v("R",i+"."+arRandom[i]);
        }
    }
   
    public static int[] uniqueRandomArray(int n){
        int [] A = new int[n];
        for(int i = 0; i< A.length; ){
            if(i == A.length){
                break;
            }
            int b = (int)(Math.random() *n) + 1;
            if(f(A,b) == false){
                A[i++] = b;
            }
        }
        return A;
    }
    public static boolean f(int[] A, int n){
        for(int i=0; i<A.length; i++){
            if(A[i] == n){
                return true;
            }
        }
        return false;
    }

Leveninstein Java

Levenshtein distance digunakan untuk mengukur nilai kesamaan atau kemiripan
antara dua buah kata (string).

Jarak Levenshtein diperoleh dengan mencari cara termudah untuk mengubah suatu string.
Secara umum, operasi mengubah yang diperbolehkan untuk keperluan ini adalah:

adapun langkahnya adalah sbb:
+memasukkan karakter ke dalam string,
+menghapus sebuah karakter dari suatu string,
+mengganti karakter string dengan karakter lain.

Untuk menghitung jarak, digunakan matriks

(n+1) x (m+1)

di mana n adalah panjang string s1 dan m adalah panjang string s2.

Dua buah string yang akan digunakan sebagai contoh adalah RONALDINHO dengan ROLANDO.

Jika dilihat sekilas, kedua string tersebut memiliki jarak 6.
Berarti untuk mengubah string RONALDINHO menjadi ROLANDO diperlukan 6 operasi, yaitu:

Mensubtitusikan  N dengan L ( RONALDINHO -> ROLALDINHO )
Mensubtitusikan L dengan N ( ROLALDINHO -> ROLANDINHO )
Mensubtitusikan I dengan O ( ROLANDINHO -> ROLANDONHO )
Menghapus O ( ROLANDONHO -> ROLANDONH )
Menghapus H ( ROLANDONH -> ROLANDON )
Menghapus N ( ROLANDON -> ROLANDO )

Dengan menggunakan representasi matriks dapat dilihat pada tabel di bawah.



Pada Tabel 1, elemen baris 1 kolom 1 (M[1,1]) adalah
jumlah operasi yang diperlukan untuk mengubah substring dari kata ROLANDO yang diambil mulai dari karakter awal sebanyak 1 (R) ke substring dari kata RONALDINHO yang diambil mulai dari karakter awal sebanyak 1 (R).

Sementara M[3,5] adalah jumlah operasi antara ROL (substring yang diambil mulai dari karakter awal sebanyak 3) dengan RONAL (substring yang diambil mulai dari karakter awal sebanyak 5).

Hal ini disimpulkan bahwa elemen M[p,q] adalah jumlah operasi antara substring kata pertama yang diambil mulai dari awal sebanyak p dengan substring kata kedua yang diambil dari awal sebanyak q.

Dengan demikian, matriks pada Tabel diatas dapat diisi seperti pada Tabel dibawah ini.

Elemen terakhir (kanan bawah) adalah elemen yang nilainya menyatakan jarak kedua string yang dibandingkan. Lalu untuk menghitung nilai kemiripan menggunakan rumus:
Elemen terakhir (kanan bawah) adalah elemen yang nilainya menyatakan jarak kedua string yang dibandingkan.

Lalu untuk menghitung nilai kemiripan menggunakan rumus:


Sim = Similarity/ nilai kemiripan
Dis = jarak Levenshtein
MaxLength = nilai string terpanjang
Jika nilai similarity adalah 1, maka kedua string yang dibandingkan sama.

Di lain hal, jika similarity 0, maka kedua string yang dibandingkan tidak sama.



package javaleveninstein;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import sun.rmi.runtime.Log;

public class JavaLeveninstein {

    public static void main(String[] args) {

        String[]ark=new String[5];
            ark[0]="Tahajud";
            ark[1]="Iqomah";
            ark[2]="Adzan";
            ark[3]="Dluha";
            ark[4]="Fardhu";
     
        String    gabs="";
        for(int j=0;j<ark.length;j++){
            gabs=gabs+ark[j].toLowerCase()+" ";
            }
     
        String scari="pardu";
//++++++++++++++++++++++++++++++++++

    Leveninstein x=new Leveninstein();
    String[]ar=new String[1000];
    int r=0;
    String text=gabs;//.toLowerCase();//gab=kalimat halo apa kabar all
    String keyword=scari;
    String[] data = text.split(" ");
    List<Integer> dist = new ArrayList<Integer>();
    for (int i = 0; i < data.length; i++){
        dist.add(x.distance(data[i], keyword));
        System.out.println(i+":"+keyword+"="+x.distance(data[i],keyword));
    }
    Collections.sort(dist);

    for (int i = 0; i < data.length; i++){
        if (x.distance(data[i], keyword) == dist.get(0)){
            if(text.indexOf(data[i])>=0){
                ar[r]=data[i].toLowerCase();
                System.out.println( data[i] + " >> " + x.distance(data[i], keyword));
                r++;
            }
        }
    }//for


    String []arh=new String[1000];
    int ada=0;
    for (int i = 0; i < ark.length; i++) {
        String me = ark[i].toLowerCase();
        for (int j = 0; j < r; j++) {
            if (me.indexOf(ar[j]) >= 0 || me.indexOf(scari)>=0) {
                arh[ada]=ark[i];
                ada++;
                break;
            }
        }
    }
    System.out.println("III =="+ada);
    String[]arHasil=new String[ada];

    for (int i = 0; i < ada; i++){
        arHasil[i]=arh[i];
        System.out.println( arHasil[i]);
    }
     
     
     
     
        }//main
 
}


Implementasi Leveninstein JAVA


package lp2maray.com;

public class Leveninstein {

    public static int distance(String a, String b){
        a = a.toLowerCase();
        b = b.toLowerCase();
        int[] costs = new int[b.length() + 1];
        for (int j = 0; j < costs.length; j++)
            costs[j] = j;

        for (int i = 1; i <= a.length(); i++) {
            costs[0] = i;
            int nw = i - 1;
            for (int j = 1; j <= b.length(); j++){
                int cj = Math.min(1 + Math.min(costs[j], costs[j - 1]),a.charAt(i - 1) == b.charAt(j - 1) ? nw : nw + 1);
                nw = costs[j];
                costs[j] = cj;
            }
        }
        return costs[b.length()];
    }

}


==========

btnCari.setOnClickListener(new OnClickListener(){
public void onClick(View v){textlength = edCari.getText().length();

  for (int i = 0; i < jd; i++) {
        Element e = (Element) nl.item(i);
        String l_nama=parser.getValue(e, KEY_nama);
        String l_deskripsi=parser.getValue(e, KEY_deskripsi);
        gabs=gabs+l_nama.toLowerCase()+" ";
    }


text_sort.clear();
image_sort.clear();
String scari=edCari.getText().toString().toLowerCase();
//++++++++++++++++++++++++++++++++++

    Leveninstein x=new Leveninstein();
    String[]ar=new String[1000];
    int r=0;
    String text=gabs;//.toLowerCase();//gab=kalimat halo apa kabar all
    String keyword=scari;
    String[] data = text.split(" ");
    List<Integer> dist = new ArrayList<Integer>();
    for (int i = 0; i < data.length; i++){
        dist.add(x.distance(data[i], keyword));
        Log.v("COMP",i+":"+keyword+"="+x.distance(data[i],keyword));
    }
    Collections.sort(dist);

    for (int i = 0; i < data.length; i++){
        if (x.distance(data[i], keyword) == dist.get(0)){
            if(text.indexOf(data[i])>=0){
                ar[r]=data[i].toLowerCase();
                Log.v("MAYBE", data[i] + " >> " + x.distance(data[i], keyword));

                r++;
            }
        }
    }//for


    arrNama2=new String[1000];
    arrDes2=new String[1000];
    arrGbr2=new int[1000];

    text_sort.clear();
    image_sort.clear();
    int ada=0;
    for (int i = 0; i < arrNama.length; i++) {
        String me = arrNama[i].toLowerCase();
        for (int j = 0; j < r; j++) {
            if (me.indexOf(ar[j]) >= 0 || me.indexOf(scari)>=0) {
                arrNama2[ada]=arrNama[i];
                arrDes2[ada]=arrDes[i];
                arrGbr2[ada]=arrGbr[i];
                Log.v("BC",arrNama2[ada]);
                ada++;
                break;
            }
        }
    }
    Log.v("III","=="+ada);
    arrNama3=new String[ada];
    arrDes3=new String[ada];
    arrGbr3=new int[ada];

    for (int i = 0; i < ada; i++){
arrNama3[i]=arrNama2[i];
        Log.v("CC",arrNama3[i]);
arrDes3[i]=arrDes2[i];
arrGbr3[i]=arrGbr2[i];
}

listview.setAdapter(new MyCustomAdapter(arrNama3, arrGbr3));
listview.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> a, View v, int p, long id) {
               Intent i = new Intent(pencarian.this, detail.class);
               i.putExtra("istilah", arrNama3[p]);
               i.putExtra("deskripsi", arrDes3[p]);
               startActivity(i);
               Toast.makeText(pencarian.this,arrNama3[p]+ " ....", Toast.LENGTH_LONG).show();
        }
       });
}});


Rabu, 05 Oktober 2016

Menghitung selisih waktu (jam-menit-detik)

import java.util.Scanner;
/**
 *
 *  @author Yudi Setiawan
 *
 */
public class Main {
    public static void main(String[] args) {
         
        //  Scanner
        Scanner scan = new Scanner(System.in);
         
        //  Input Waktu Awal
        System.out.println("Waktu Awal");
        System.out.print("Input Jam   : ");     String str_jam_awal = scan.nextLine();
        System.out.print("Input Menit : ");     String str_menit_awal = scan.nextLine();
        System.out.print("Input Detik : ");     String str_detik_awal = scan.nextLine();
         
        //  Input Waktu Akhir
        System.out.println("\nWaktu Akhir");
        System.out.print("Input Jam   : ");     String str_jam_akhir = scan.nextLine();
        System.out.print("Input Menit : ");     String str_menit_akhir = scan.nextLine();
        System.out.print("Input Detik : ");     String str_detik_akhir = scan.nextLine();
         
        //  Tampilkan Waktu Awal dan Waktu Akhir
        String str_waktu_awal = str_jam_awal+":"+str_menit_awal+":"+str_detik_awal;
        String str_waktu_akhir = str_jam_akhir+":"+str_menit_akhir+":"+str_detik_akhir;
        System.out.println("Waktu Awal  : "+str_waktu_awal);
        System.out.println("Waktu Akhir : "+str_waktu_akhir);
         
        //  Konversi variable str menjadi integer
        int jam_awal = Integer.parseInt(str_jam_awal);
        int jam_akhir = Integer.parseInt(str_jam_akhir);
        int menit_awal = Integer.parseInt(str_menit_awal);
        int menit_akhir = Integer.parseInt(str_menit_akhir);
        int detik_awal = Integer.parseInt(str_detik_awal);
        int detik_akhir = Integer.parseInt(str_detik_akhir);
         
        //  Proses pencarian selisih Waktu Awal dan Waktu Akhir
        //  Langkah Ketiga, cari selisih detik awal dan detik akhir    
        int selisih_detik = 0;
         
        //  Jika detik awal > detik akhir
        //  Contohnya, detik awal = 40 dan detik akhir = 30
        if(detik_awal > detik_akhir) {
             
            while(detik_awal != detik_akhir) {
                 
                if(detik_awal == 60) {
                    detik_awal = 0;
                    menit_awal++;
                        continue;
                }
                detik_awal++;
                selisih_detik++;
            }
        }
         
        //  Jika detik awal < detik akhir
        //  Contohnya, detik awal = 30 dan detik akhir = 40
        else if(detik_awal < detik_akhir) {
            selisih_detik = detik_akhir - detik_awal;
        }
         
        //  Masukkan ke variable selisih waktu
        int selisih_waktu = selisih_detik;
         
        //-------------------------------------------------------
        //  Langkah Kedua, cari selisih menit awal dan menit akhir     
        int selisih_menit = 0;
         
        //  Jika menit awal > menit akhir.
        //  Contohnya, menit awal = 50 dan menit akhir = 10
        if(menit_awal > menit_akhir) {
             
            while(menit_awal != menit_akhir) {
                 
                if(menit_awal == 60) {
                    menit_awal = 0;
                    jam_awal++;
                        continue;
                }
                 
                menit_awal++;
                selisih_menit++;
            }
        }
         
        //  Jika menit awal < menit akhir
        //  Contohnya, menit awal = 10 dan menit akhir = 50
        else if(menit_awal < menit_akhir) {
            selisih_menit = menit_akhir - menit_akhir;         
        }
         
        //  Ubah selisih menit menjadi satuan detik (1 menit = 60 detik)
        selisih_waktu += selisih_menit * 60;
         
        //  Langkah Pertama, cari selisih jam awal dan jam akhir       
        int selisih_jam = 0;
         
        //  Jika jam awal > jam akhir. Contohnya, Jam Awal = 22 (10 malam) dan Jam Akhir = 05 (5 pagi)
        if(jam_awal > jam_akhir) {
             
            //  Cocokkan antara jam awal dan jam akhir
            while(jam_awal != jam_akhir) {
                if(jam_awal == 24) {               
                    jam_awal = 0;
                    continue;
                }
                 
                jam_awal++;
                selisih_jam++;
            }
        }
         
        //  Jika jam awal < jam akhir. Contohnya, Jam Awal = 05 (5 pagi) dan Jam Akhir = 22 (10 malam)
        else if(jam_awal < jam_akhir)
            selisih_jam = jam_akhir - jam_awal;
         
        //  Ubah selisih jam menjadi satuan detik (1 jam = 3600 detik)
        selisih_waktu += selisih_jam * 3600;
         
        //  Tampilkan selisih antara waktu awal dan waktu akkhir dalam satuan detik
        System.out.println("Selisih antara waktu awal dan waktu akhir (detik) : "+selisih_waktu);
         
        //  Ubah selisih_waktu menjadi format waktu HH:mm:ss
        //  Ubah selisih waktu menjadi satuan jam
        int jam = selisih_waktu / 3600;
        selisih_waktu %= 3600;
         
        //  Ubah selisih waktu menjadi satuan menit
        int menit = 0;
        int detik = 0;
        if(selisih_waktu >= 60) {
            menit = selisih_waktu / 60;
            detik = selisih_waktu % 60;
             
        } else {
            menit = 0;
            detik = selisih_waktu;
        }
         
        //  Tampilkan selisih antara waktu awal dan waktu akhir dalam format waktu HH:mm:ss
        String waktu = jam+":"+menit+":"+detik;
        System.out.println("Selisih antara waktu awal dan waktu akhir (HH:mm:ss) : "+waktu);
    }
}


OUTPUT:

Bisa juga menggunakan code sbb:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;

import org.joda.time.DateTime;
import org.joda.time.Seconds;

/**
 *
 * @author Yudi Setiawan
 *
 */

public class Main2 {
    public static void main(String[] args) throws ParseException {
         
        //  SimpleDateFormat        
        SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");
         
        //  Scanner
        Scanner scan = new Scanner(System.in);
         
        //  Input Waktu Awal
        System.out.println("Waktu Awal");
        System.out.print("Input Jam   : "); String waktu_awal = scan.nextLine()+":";
        System.out.print("Input Menit : "); waktu_awal += scan.nextLine()+":";
        System.out.print("Input Detik : "); waktu_awal += scan.nextLine();
         
        //  Input Waktu Akhir
        System.out.println("\nWaktu Akhir");
        System.out.print("Input Jam   : "); String waktu_akhir = scan.nextLine()+":";
        System.out.print("Input Menit : "); waktu_akhir += scan.nextLine()+":";
        System.out.print("Input Detik : "); waktu_akhir += scan.nextLine();
         
        //  Ubah waktu awal dan waktu akhir menjadi DateTime
        DateTime dtAwal = new DateTime(sdfTime.parse(waktu_awal));
        DateTime dtAkhir = new DateTime(sdfTime.parse(waktu_akhir));
         
        //  Tampilkan waktu awal dan waktu akhir
        System.out.println();
        System.out.println("Waktu Awal  : "+waktu_awal);
        System.out.println("Waktu Akhir : "+waktu_akhir);
         
        //  proses cari selisih waktu dalam satuan detik
        //  10:50:20 - 11:30:50
        int selisih_detik = Math.abs(Seconds.secondsBetween(dtAwal, dtAkhir).getSeconds());
        System.out.println("Selisih waktu awal dan waktu akhir (detik) : "+selisih_detik);
         
        //  Ubah selisih detik menjadi format HH:mm:ss
        int jam = selisih_detik / 3600;
        selisih_detik %= 3600;
                 
        int menit = 0;
        int detik = 0;
        if(selisih_detik >= 60) {
            menit = selisih_detik / 60;
            detik = selisih_detik % 60;
        } else {
            detik = selisih_detik;
        }
         
        //  Tampilkan selisih waktu dalam format HH:mm:ss
        String selisih_waktu = jam+":"+menit+":"+detik;
        System.out.println("Selisih waktu awal dan waktu akhir (HH:mm:ss) : "+selisih_waktu);
                                                 
    }
}


public static void main(String[] args) {
        Scanner Input = new Scanner (System.in);
        System.out.println ("syarat -j2 harus lebih besar dari j1. -nilai keduanya tidak boleh nol");
        
        System.out.print("Jam 1 =");
        int j1 = Input.nextInt();
        System.out.print("Menit 1 =");
        int m1 = Input.nextInt();
        System.out.print("Detik 1 =");
        int d1 = Input.nextInt();
    
       
        
        System.out.print("Jam 2 =");
        int j2 = Input.nextInt();
        System.out.print("Menit 2 =");
        int m2 = Input.nextInt();
        System.out.print("Detik 2 =");
        int d2 = Input.nextInt();
    
    
    int j3, sisa, m3, d3;
    int waktu1, waktu2, selisih;

    waktu1 = (3600*j1)+(60*m1)+d1;
    waktu2 = (3600*j2)+(60*m2)+d2;
    selisih = waktu2-waktu1;
    j3 = selisih/3600;
    sisa = selisih%3600;
    m3 = sisa/60;
    d3 = sisa%60;

    System.out.println ("MENGHITUNG SELISIH WAKTU");
    System.out.println ("========================");
    System.out.println ("\nWaktu Pertama   = "+j1+":"+m1+":"+d1);
    System.out.println ("Waktu Kedua     = "+j2+":"+m2+":"+d2);
    System.out.println ("\nSelisih Waktu   = "+j3+":"+m3+":"+d3);
    }

    }


reff:
http://jagocoding.com/tutorial/1197/Cara_Mencari_Selisih_Waktu_di_Java