5.00 / 1 oy

Java'da Medyan (Ortanca Değer) Bulmak

Java'da bir dizi (vektör) içerisinde sıralama yapma konularına biraz olsun değinmiştik. Manuel sıralama yapma algoritması ve Java'da Arrays.sort metodunu kullanarak sıralama yapma yazılarıma bakmanızı tavsiye ederim. bugün daha karmaşık olarak nitelendirilebilecek bir problemi ve çözümünü paylaşmak istiyorum. Tanım yaparak başlayalım:

Medyan (Ortanca Değer) Nedir ve Nasıl Hesaplanır?

Medyan, istatistiksel bir terimdir ve bir dizi sayının sıraya dizilerek yazımında tam ortada kalan sayıya medyan adı verilmektedir. Medyan için örnek verecek olursak:

Tek sayılı sayıda bir dizi için tam ortadaki değer medyandır:

2, 4, 4, 5, 6, 8, 9

Çift sayılı sayıda bir dizi için tam ortadaki 2 değer medyandır:

1, 2, 3, 3, 4, 5, 6, 6, 7, 8

Gelelim Java'da bir dizi (vektör) içerisinde medyan olan değerin nasıl bulunabileceğine.

Algoritma olarak yukarıdaki iki diziden de görebileceğimiz gibi eğer dizi tek sayılı bir eleman sayısına sahipse medyan tam ortadaki değer olacak; çift sayılı olması durumunda ise tam ortadaki iki değer birlikte medyan olacaklar. Bunun için;

- Önce rastegele eleman sayısına sahip ve rastgele elemanlardan oluşan bir vektör üretelim. (Bkz: Java'da rastgele elemanlardan oluşan bir dizi (vektör) üretmek)

- Sonra ürettiğimiz vektörün elemanlarını sıralayalım

- En son olarak da vektörün eleman sayısına göre ortanca elemanlarını tespit edelim. Eğer çift sayı ise bu iki ortanca sayının da ortalamasını alalım. Bu yüzden medyan değerini double olarak tanımlamak gerekir.

Kodlar:

int elemansayisi=(int)(Math.random()*10)+1; //1-10 arasında rastgele eleman sayısı

int[] vektor=new int[elemansayisi];
Random eleman = new Random();

for (int i = 0; i < vektor.length; i++) 
{
 vektor[i] = eleman.nextInt(); //vektör elemanlarını atıyoruz
}

Arrays.sort(vektor); //vektör elemanlarını sıralayalım
System.out.println(""); 
System.out.println(Arrays.toString(vektor));

double medyan;

if (vektor.length % 2 == 0)
  medyan = ((double)vektor[vektor.length/2] + (double)vektor[vektor.length/2 - 1])/2; //ortancaların ortalaması

else
  medyan = (double) vektor[vektor.length/2]; //tek sayılı eleman sayısına sahip vektörün ortanca elemanı

System.out.println("Medyan="+medyan);

Çıktı:

[-1466460024, -1372082129, -1243058189, -296398795, -140935384, 499986439, 771433233, 971178047, 1158447933, 1623068517]
Medyan=1.795255275E8

Açıklamalar:

- Çıktı ekranındaki E8 ifadesi, ürettiğimiz vektör elamanlarının çok büyük olmasından kaynaklanmaktadır. Daha küçük rastgele değerlerle çalışılarak daha küçük sayılar da elde edilebilir

- Tek sayıdaki vektör elemanına sahip vektörün ortanca elemanını bulurken (Örnek: 5 olsun)

5/2=2 değeridir çünkü tamsayı/tamsayı=tamsayı olur. (Bkz: vektor.length/2) 2 indisli eleman da vektörler 0 indisi ile başladıkları için 3. elemandırlar ve 5 elemanlı bir dizinin ortanca elemanı da 3. elemandır. Aynı mantık ile çift sayılı eleman sayısına sahip vektör çözümümü de anlayabilirsiniz.

utku33

01.02.2020 04:25

Bu soru 1 kez yanıtlandı.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
Java'da Medyan (Ortanca Değer) Bulmak

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.