26 Şubat 2016 Cuma

Eclipse Apache Tomcat 8 Görünmeme Sorunu

  Yazılımla uğraşırken bir hataya daha rastladım ve bu hatayıda ileride karşılaşırsam diye kayıt altına almaktayım. Gelelim hatamıza javaEE ile çalışırken eclipce'in javaEE sürümünün son versiyonunu indirmeme rağmen Apache Tomcat son versiyonlarının eclipse tarafından tanınmadığı bir hata aldım.
  İnternette biraz araştırma yaptıktan sonra aşağıdaki çözüme ulaştım.
Çözüm :
1- Eclipse açıyoruz sonra Help => Install New Software tıklıyoruz.
2- "Kepler- http://download.eclipse.org/releases/kepler" yada
    "Luna – http://download.eclipse.org/releases/luna" bunu kopayalıyoruz.
3- "Web, XML, and Java EE Development" kısmını açıyoruz.
4-  JST Server Adapters ve JST Server Adapters Extensions öğelerini indiriyoruz.
  - İndirme işlemi bitince Apache Tomcat'i tanıtmaya geçiyoruz
5- Window / Preferences / Server / Runtime Environments yolunu izliyoruz.
6- Add butonuna tıklıyoruz sonra yükleyeceğimiz versiyonu seçiyoruz.
7- Apache Tomcat'in yolunu belirtiyoruz Ok  butonuna basıp işlemlerimizi bitiriyoruz.

Böylece Apache Tomcat tanıtma işlemimizi yapıyoruz.

Metindeki Harflerin Sayısını Bulma

  Bu yazımızda bir metnin içinde geçen harflerin sayısını bulmaya çalışacağız.
Algoritma şöyle çalışmaktadır.
  İlk olarak metnin içindeki harf dışındaki karakterleri ayrıştırıyoruz. Bu metin içinde kaç farklı harf var ise onları buldurup farklı harf sayısı kadar dizi oluşturuyoruz.
  Sonra algoritmanın ana kısmına geçiyoruz yani metnin ayrıştırılmış tüm karakterlerini birbir bakarak kontrol ediyoruz. Metnin tüm karakterlerini kontrol ettiğimizden aynı karakteri tekrar yazmamak için dizimiz içinde o an kontrol edilen karakterin olup olmadığına bakıyoruz eğer yoksa yeni harf nesnesi oluşturup onu dizimize ekliyoruz.
  Bütün karakterler kontrol edildikten sonra dizimizi yazdırıyoruz.Yazdırırken metnin içindeki sıraya
göre yazdırılıyor.

Örnek bir metin ve sonucu şöyledir.
Bir cümle giriniz...
Bu bir deneme yazısıdır.
B -> 1
u -> 1
b -> 1
i -> 1
r -> 2
d -> 2
e -> 3
n -> 1
m -> 1
y -> 1
a -> 1
z -> 1
ı -> 3
s -> 1

Main metodu ve ana metodu koydum diğerlerini github adresinde bulabilirsiniz.


 public static void main(String[] args) {
        Harf harfDizisi[] = null;
        String cumlemiz = "";
        
        cumlemiz = cumleyiAl();

        harfDizisi = harfSay(cumlemiz);

        ciktiVer(harfDizisi);
    }

public static Harf[] harfSay(String cumle) {
        Harf harfDizisi[] = null;
        int farkliHarfSayisi = 0;
        int sayac = 0;

        farkliHarfSayisi = kacFarkliHarfVarKontrolEt(cumle);
        //harf dizimizi burada oluşturuyoruz
        harfDizisi = new Harf[farkliHarfSayisi];

        // cumlenin tum harflerini tektek konrol ediyoruz
        for (int i = 0; i < cumle.length(); i++) {
            char kontrolEdilecekHarf = cumle.charAt(i);

            int ayniHarfSayisi = ayniHarfSaysiniBul(cumle, kontrolEdilecekHarf);

            //aynı harften yok baska bir harf buyuzden dizimize ekliyoruz
            if (!aynisindanHarfDizisindeVarMi(harfDizisi, kontrolEdilecekHarf)) {
                //diziye yeni harf oluşturup ekliyoruz
                harfDizisi[sayac] = new Harf(kontrolEdilecekHarf, ayniHarfSayisi);
                sayac++;
            }
        }

        return harfDizisi;
    }


Kodlara ulaşmak için github adresine gidin

10 Şubat 2016 Çarşamba

Hızlı sıralama - Quick Sort

  Hızlı(Quick sort) sıralama algoritması çok hızlı algoritmalardan birisidir. Sadece eğitim amaçlı değil programların içerisinde de sıralama için kullanılmaktadır. Algoritma çok basittir ve yerinde sıralama yapar yani tek dizi üzerinde elemanların yerlerini değiştirerek işlem yapar. Böyle olması da zaman açısından ve alan açısından hız demektir.

Algoritmanın çalışma mantığı
  Sayı dizisinden herhangi bir sayıyı dayanak eleman(pivot) eleman olarak seç.
  Sayı dizisini dayanak elemandan(pivot) küçük olan tüm sayılar dayanak elemanın(pivot) önüne, dayanak elemandan(pivot) büyük olan tüm sayılar dayanak elemanın(pivot)  arkasına gelecek biçimde düzenle (dayanak elemana eşit olan sayılar her iki yana da geçebilir).
  Bu bölümlendirme işleminden sonra eleman sıralanmış son dizide olması gerektiği yere gelir. Algoritmanın bu aşamasına bölümlendirme aşaması denir.
  Dayanak elemanın sol ve sağ yanında olmak üzere oluşan iki ayrı küçük sayı dizisi, hızlı sıralama algoritması bu küçük parçalar üzerinde yeniden özyineli olarak çağrılarak sıralanır.

Algoritmanın karmaşıklığı
Hızlı sıralama algoritması n adet sayıyı, ortalama bir durumda, {O}(nlog(n)) karmaşıklığıyla, en kötü durumda ise {O}(n^2) karmaşıklığıyla sıralar.

Hızlı sıralama algoritması java kodları

 public static void hizliSiralama(int dizi[], int sol, int sag) {
  int indis = parca(dizi, sol, sag);
  if (sol < indis - 1) {
   hizliSiralama(dizi, sol, indis - 1);
  }
  if (indis < sag) {
   hizliSiralama(dizi, indis, sag);
  }
 }

 public static int parca(int dizi[], int sol, int sag) {
  int i = sol, j = sag;
  int gecici;
  int dayanakEleman = dizi[(sol + sag) / 2];

  while (i <= j) {
   
   //soldan başlayarak dayanak elemanı(pivot)tan küçük elemanı bul
   while (dizi[i] < dayanakEleman) {
    i++;
   }
   //sağdan başlayarak dayanak elemanı(pivot)tan büyük elemanı bul
   while (dizi[j] > dayanakEleman) {
    j--;
   }
   //bulunan elamanların yerlerini değiştir
   if (i <= j) {
    gecici = dizi[i];
    dizi[i] = dizi[j];
    dizi[j] = gecici;
    i++;
    j--;
   }
  };

  return i;
 }


Kodlara ulaşmak için github adresine gidin

9 Şubat 2016 Salı

Birleştirmeli Sıralama - Merge Sort

  Merge sort (bireşen sıralama), diziyi ardışık olarak en küçük alt dizilerine kadar yarılayan sonra da onları sıraya koyarak bireştiren özyineli bir algoritmadır. Yarılama işlemi en büyük alt dizi en çok iki öğeli olana kadar sürer. Sonra merge (bireşim) işlemiyle altdiziler ikişer ikişer bölünüş sırasıyla sıralı olarak bir üst dizide bireşir. Süreç sonunda en üstte sıralı diziye ulaşılır.

Algoritmanın çalışma mantığı şu şekildedir. 
  Sıralı olmayan listeyi ortadan eşit olarak iki alt listeye ayırır.
  Alt listeleri kendi içinde sıralar.
  Sıralı iki alt listeyi tek bir sıralı liste olacak şekilde birleştirir.

Algoritmanın karmaşıklığı 
  Birleştirme sıralaması böl ve yönet algoritmasına güzel bir örnektir. Birleştirme sıralamasının karmaşıklığını hesaplamak için sıralanacak N elemanlı diziyi bir ağaç yapısına taşıyınca her bir düğüm bir alt diziyi temsil eder.
  Ağaç tam olarak n seviye içerir. k sayısı 0'dan n-1'e kadar ağaç seviyesini temsil etsin, yukarıdan aşağıya doğru ağacın k. seviyesinde 2^k tane düğüm bulunur. Bu düğümlerin her biri 2^{n-k}uzunluğunda bir alt diziyi temsil eder.
  Bir alt dizinin eleman sayısı 2^{n-k} olduğu için en fazla 2^{n-k} karşılaştırma yapılabilir. Ağacın her seviyesindeki alt dizi sayısı ve yapılabilecek en fazla karşılaştırma sayısı2^k . 2^{n-k} = 2^n ' dır. n seviye ağaç için toplam n . 2^n karşılaştırma yapılır. Elde edilen n . 2^n değerinin asimptotik üst sınırı O(NlgN) değeridir.

 Birleştirmeli sıralama algoritması java kodları

 public static void birlestirmeliSiralama(int alt, int üst,int[] sirasizDizi) {
  if (alt < üst) {
   int orta = (alt + üst) / 2;
   //sirasiz dizimi yerel değişken yaptığımdan diziyide metodlara yolladım
   birlestirmeliSiralama(alt, orta, sirasizDizi); 
   birlestirmeliSiralama(orta + 1, üst,sirasizDizi);
   birlestir(alt, orta, üst,sirasizDizi);
  }
 }

 public static void birlestir(int alt, int orta, int üst,int[] sirasizDizi) {
  int[] yedekDizi = new int[sirasizDizi.length];
  int i, j, k;
// a dizisinin her iki yarısını yedekDizi dizinine kopyala
  for (i = alt; i <= üst; i++) {
   yedekDizi[i] = sirasizDizi[i];
  }
  i = alt;
  j = orta + 1;
  k = alt;
  // her adımda bir sonraki en büyük terimi kopyala
  while (i <= orta && j <= üst) {
   if (yedekDizi[i] <= yedekDizi[j]) {
    sirasizDizi[k++] = yedekDizi[i++];
   } else {
    sirasizDizi[k++] = yedekDizi[j++];
   }
  }
// varsa, ilk yarıdan arta kalan terimlerin hepsini kopyala
  while (i <= orta) {
   sirasizDizi[k++] = yedekDizi[i++];
  }
 }

Kodlara ulaşmak için github adresine gidin