Şimdi Ara

Bir problemi hangi sıralama algoritmasıyla çözmeliyim?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
15
Cevap
0
Favori
373
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Twitter hashtag'lerinin tweet sayılarını içeren bir Java hashmap olduğunu varsayalım. Diyelim ki [“cuma”: 23800, “Holiday”: 19400, “BirTavsiyeVerin”: 5112, “Fenerbahçe”: 11000, ....] gibi bir hashmap var.
    Bu tweeter hash etiketlerinin popülaritesini en popülerinden popüler olmayanlara sıralarsak, bu işlemi daha hızlı yapmak için hangi sıralama algoritmasını kullanmalıyız?
    Açıklamalarıyla yazar mısınız?



  • - Degerler random
    - Tekrarli deger az ya da hic yok
    - Degerler arasi min - max fazla
    - Halihazirda "partially sorted" degiller.

    Hal boyleyken maceraya gerek yok, Javanin kendi sortu yeterli sort etmek icin.

    Eger amac tum bunlarin sorted halini listelemekse once API'den cekip sonra Java nin kendi sort implementasyonu ile sort edebilirsin.

    Eger amac en populer 3-5 hashtagi gostermek ise, sorta gerek yok Heap kullan. ( PriorityQueue )

    Eger surekli yeni data ekliyorsan ve her defasinda sort etmek istiyorsan ( Sort edilen dataya insertion yapacaksin, Binary Search ile ugrasmadan ) TreeSet kullan.
    docs.oracle.com
    TreeSet (Java Platform SE 8 )
    https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html


    Hangi sort algoritmasini kullanacagina sort edecegin datanin icerigine gore karar verilir ama senin paylastigin datada BucketSort ya da InsertionSort kullanmani gerektirecek bir ozellik yok.

    Bir de hashmap i value degerine gore sort etmektense map'teki degerleri bir Wrapper class ile wrap edip ( Comparable interface ini implemente eden ), ona gore Heap ya da TreeSet kullanmak en mantiklisi bana gore. Hangi veri yapisini kullanacagin da dedigim gibi neden sort etmek istedigin sorusunun cevabinda yatiyor.

    Ayrica az once test ettim, 1 milyon unique degeri 500 ms icinde sort ediyor Java'nin kendi sort algoritmasi. (jdk8, i7 7700 makinede single thread )

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Mephalay M kullanıcısına yanıt
    Öncellikle teşekkür ederim.Bilginiz işime yarayacak bir de şöyle bi kısıtlama içinde hangisi daha mantıklı olur
    Heap sort,quick sort (pivotları first ,random ve first+ortanca+last arasında ortanca bi değeri olan) ,dualpivotquicksort ve introsort

    YazdığınıZda heap dediniz ama neden quicksort değil yine bu kısıtlamada da heap mi ?



    < Bu mesaj bu kişi tarafından değiştirildi gecesesi.35 -- 4 Nisan 2019; 16:53:58 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • gecesesi.35 kullanıcısına yanıt
    Adam sana Java Collections class larını kullan diyor, Comparable Interface'den bahsediyor, sen hala quick mi heap mi pivot mivot sayıklıyorsun.. anlamadın cevabı, çünkü temel Java bilmiyorsun. Önce Java öğren, aç Java Tutorial oku çalış. C programı yazar gibi Java yazmayın.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • seyfi84 S kullanıcısına yanıt
    Cevabı anladım benim belli kriterlerde ödevim var run time hesaplama gibi ondan soruyorum ilk önce nedenini öğren yargılayacağına java yı bilsen ne durumu anlamadıktan sonra

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • gecesesi.35 kullanıcısına yanıt
    Ben Heapsort demedim, Heap data structure olarak dedim. Eger amacin en populer birkac tanesini gostermek ise, tamamini sort etmene gerek yok anlaminda. (
    en.wikipedia.org
    Heap (data structure) - Wikipedia
    https://en.wikipedia.org/wiki/Heap_(data_structure)
    )

    Ilk mesajindaki gibi bir data icin hangi sort algoritmasinin daha uygun olacagini kimse bilemez, worst-case time complexity'si nlogn olan herhangi bir sortu secerek yanlis yapmis olmazsin. ( Quick-sort worst case de n^2 dir )

    Odevse bu, hepsini implement et, ogrenmis olursun.

    Yok bir projeyse dedigim gibi kasma Javanin kendi sortu ile ilerle. ( Java Comparable lar icin mergesort, primitive type lar icin dual pivot kullaniyor bu mesaji yazdigim tarihte )

    Benim anlamadigim, bu nasil bir odev? Amac sort algoritmalarini karsilastirmaksa twitter API ile ne diye ugrasiyorsunuz? Ayrica hic bir akli-selim akademisyen "en iyi sort algoritmasini bulun getirin" gibi bir sacmalik yapmaz. Datanin buyuklugune gore, datanin tipine gore, sort edecek bilgisayarinin memory limitasyonuna gore secersin muhendis olarak. 1 milyon elemanli bir listede rastgele 3 -5 elemanin yerini degistir, sort algoritmalarinin da performanslari da yer degistirir. Tam olarak nereye varmaya calistigini cozemedim.

    Sedgewick'in Algorithms kitabini tavsiye ederim.

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • Dün akşam HashMap ile bir sort deneyeyim dedim ve verileri kod içinden girmek içinhttps://stackoverflow.com/questions/507602/how-can-i-initialise-a-static-map/1134205?utm_campaign=DonanimHaber&utm_medium=referral&utm_source=DonanimHaber 'da bahsedilen " anonymous class with an instance initializer" yöntemini denedim, olmadı ekte görülen serializable class <anonymous SIRALA$1> has no definition of serialVersionUID hatayı verdi. Sözkonusu hata nasıl giderilir?

    Bir problemi hangi sıralama algoritmasıyla çözmeliyim?




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Mephalay M kullanıcısına yanıt
    Cok Teşekkür ederim.. Fix bir şey aramıyordum sadece uğraşıp cıkan sonuçları birbirleriyle kıyaslayım bir çıkarımda bulunmak

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • O hata degil, warning.
    Serializable interface'ini implemente etmene ragmen uid belirlemedigin icin uyariyor. Iki tane Java programi arasinda serialize-deserialize islemi yapilirken uid ler tutmazsa class lar farkli olacagi icin sorun cikabilir demeye calisiyor. Verdigin kod calisir.

    Iki tane "{" kullandigin icin aslinda sen subclass initialize ediyorsun. HashMap de Serializable interfaceini implemente ettiginden, sen de etmek durumundasin inheritance yuzunden.

    Bence senin verdigin kod blogu yerine soyle bir sey yapsan cok daha temiz, hic gerek yok double curly muhabbetine:

    Bir problemi hangi sıralama algoritmasıyla çözmeliyim?



    < Bu mesaj bu kişi tarafından değiştirildi Mephalay -- 5 Nisan 2019; 15:39:18 >




  • Mephalay M kullanıcısına yanıt
    Aynen dediğin gibi, haya değil uyarıymış; Emacs 'in Java modunu yeni kullanmaya başladığımdan onu farketmedim. Ve Dediğin gibi kod derleniyor. Verdiğin örnek güzel fakat 2 "{" yöntemi ondan daha sade ve derleniyor :)

    Ancak HashMap'i Integer degerlerine göre sıralandırma kodunu da sade şekilde yapmak zor.
  • Hashmap zaten ordered degil, o yuzden sort edilemez. Baska bir collection i sort etmek icin kullanilabilir. O yuzden key value yerine wrapper class tavsiye ettim arkadasa. Key unique, value uzerinden Comparable.

    Ben arka arkaya birden fazla parantezli syntax i hic sevemedim, kafam karisiyor. Biraz uzun olsun, parantez bulamaçi olmasin, oyle seviyorum :)

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Mephalay M kullanıcısına yanıt
    HashMap sıralamasını yaptım. Dediğin gibi HashMap in kendi içinde sıralama mümkün değil.http://www.java67.com/2015/01/how-to-sort-hashmap-in-java-based-on.html'dan bakarak şu sekilde yaptım:

    // 1 Set oluştur
    // 2 Sort metodu Liste istediği için Set'ten Map.Entry<String,Integer>
    // türü elemandan oluşan bir Liste oluştur.
    // 3 Karşılaştırıcı oluştur (sort metoduna argüman olarak)
    // 4 Sırala yap (sort metodu)
    // 5 Listeyi sıralı tutmak için Liste büyüklüğünde LinkedHashMap nesnesi oluştur
    // 6 LinkedHashMap nesnesine Liste'deki degerleri yazdır
    // 7 LinkedHashMap nesnesindeki kayıtlardan yeni bir Set nesnesi oluştur
    // 8 Set 'teki degerleri yazdır :)

    Görüntü:
    Bir problemi hangi sıralama algoritmasıyla çözmeliyim?


    Bir problemi hangi sıralama algoritmasıyla çözmeliyim?


    Eclipse ile ilgili soracağım 2 şey var:
    1- import java.util.Set; 'teki Set otomatik gelmedi. Aynı sekilde import java.util.LinkedHashMap; taki LinkedHashMap de otomatik gelmedi.Diger tüm sınıflar otomatik gelirken bu 2 sınıf Eclipse tarafından otomatik gelmedi, elle yazmak zorunda kaldım. Emacs'te de aynı şekilde bu 2 sınıf otomatik gelmedi yani JDK'den kaynaklı bir durum gibi. Bu durum normal midir, sebebi ne olabilir?

    2- Eclipse 'te import java.util... diye yazarken altta otomatik listelenen paket seçeneklerini seçip nasıl devam ediyorsunuz? Altta listelen paketi seçip sekmeye basınca devam etmiyor, enter'a basınca util.*; yazıp bırakıyor oysa ki ben util'i seçtikten sonra dadevam etmek yani util'den sonra örneğin Collections sınıfı seçmek istiyorum o yüzden Eclipse'in bastığı .*; kısmını silip . basıp öyle devam etmek zorunda kalıyorum. Bu sorunu geçen sene Internette bayağı araştırdım ancak çözüm bulamadım. Emacs'te bu sorun yok, enter'a basınca düzgün devam ediyor; Eclipse'te var bu sorun...




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.