Şimdi Ara

Stringleri nasıl binary tree de tutarım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
13
Cevap
0
Favori
574
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • int degerleri bir sekilde kıyaslıyorus ornegin


    A
    / \
    C D
    / \ / \
    e g y u
    seklinde tutmamın yolu nedir charların degerkerini toplayarak yapmayı düsündüm ama farklı stringlerin topları aynı olabilir ASCII tablosundaki toplamları kısacı generic type da girilen inputu nasıl en hızlı search ederim linear olarak O(n) yapabilirim ama bu pek de verimli degil sizce ne yapmalıyım



  • ben olsam > operator'unu overload ederdim. Eğer charların değerleri toplamı aynıysa da harf sayısı fazla olan daha büyük kabul edilsin gibi bir şey diyebilirsin
  • sayi tutmaktan bir farki yok. alfabetik olarak karsilastirman yeterli. alfabede once olanlar sagda sonra olanlar solda olacak sekilde agaca yerlestirebilirsin.

    iki ismi alfabetik karsilastirmak icinde ilk harflerinin ascii tablosundaki degerlerini karsilastirabilirsin. esitse bir sonraki harfe bakar bu sekilde kim alfabede onde kim arkada karar verirsin. sozluk yapisi misali.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • int,String,char,float hepsini aynı agaçta nasıl tutabilirim
  • quote:

    Orijinalden alıntı: yasaklıbaba

    int,String,char,float hepsini aynı agaçta nasıl tutabilirim
    hepsini bir dugumde tutmaktan ve o dugumleri agacta tutmaktan bahsediyorsan dugum sinifini ona gore duzenle ve dugumler belli bir alana gore (dugum icindeki sayi tipleri veya karakter tipleri) agaclara yerlestirilsin.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • agaç içinde tutacagım ama sonra da search etmem lazım logn zaman karmaşasında BST gibi düsün tim tiplerde çalışsın biliyorsun intleri kolaylıkla saga sola atabiliyoruz ama stringleri ya da charları nasıl atarız muamma soyle diyeyim "araba",5,45.34,'t',"ray" gibi elimizde veriler olsun bunları agaç içine belli bir sırayla atıp search etmek istesek logn yaparak yalnız istedigimiz elemanı bulmak için ornegin public boolean Search(AnyType data) diye fonksiyon yazsak aranan eleman varsa true yoksa false cevirse linear olarak bulmak kolay bi dongu içinde tek tek eşitmi diye BST gibi yapıda tutabilirsek logn olur bunun calışma zamanı daha hızlı çalışır ondan dedim node içine bunları yapılandırmak zorundayım ama bunları agaçda belli bi düzende tutmak istersem mümkün mü diyorum.
  • yasaklıbaba Y kullanıcısına yanıt
    Elemanlarin natural ordering'i olmadigi icin, her bir farkli field icin farkli BST kullanmalisin.

    element1.compareTo(element2) isleminin belli bir sonucu olmayacak cunku <Comparable> degiller. ( Yaniliyor muyum ? Yoksa ambiguity olur.)

    Sen bunun yerine element1.field1.compareTo(element2.field1) yapmak istiyorsun ( Yani 1. field a gore compare etmek istiyorsun ) , o halde 1. field a gore sort edilmis bir BST bulundurmalisin, diger fieldlar icin de yine ayri ayri. BST de objenin tamamini tutmana gerek yok aslinda, sadece comparable olan field ve referans olsa yeterli.



    < Bu mesaj bu kişi tarafından değiştirildi Mephalay -- 5 Aralık 2019; 16:15:17 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Mephalay M kullanıcısına yanıt
    Comparable ı kendimiz yazarken type ı Object yaparsak türler sıkıntı çıkarmayabilir, compareto nun içinde typeof/instance of ile karşılaştırıp + - dönebiliriz gibi geldi

    public class File implements Comparable<File> {
    // ...
    }

    public int compareTo(File b){
    if(this.name > b.name) return 1;
    if(this.name < b.name) return -1;
    else return 0;
    }

    Üstteki kodda file yerine Object diyip içinde cast edebiliriz,

    Kodladıhttps://medium.com/omarelgabrys-blog/comparing-objects-307400115f88 Buradan kopyaladım



    < Bu mesaj bu kişi tarafından değiştirildi alimmm78 -- 5 Aralık 2019; 16:29:5 >
    < Bu ileti mini sürüm kullanılarak atıldı >




  • alimmm78 kullanıcısına yanıt
    compareTo() icindeki obje hep compare ettigin obje olacak, yani Comparable i implemente eden. Oradan fieldType alamazsin.
    https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html ---> Implemente eden class , compareTo() generic'i ile ayni class olmak zorunda.

    Kendi comparator'unu yazabilirsin, ki oyle yapacak zaten. Obje Comparable i implemente ediyorsa "benim natural ordering'im bu" demis oluyor.

    Collections.sort(hede<File>) yaptigin zaman compareTo() metoduna hep file gelecek, cunku Comparator bilmiyor senin hangi field'a gore sort etmek istedigini.

    Yani isin ozu, Comparable i implemente etse bile her field icin farkli Comparator yazacak. Genelde convention eger objenin natural ordering i yoksa Comparable i implemente etmez ambiguity olmamasi adina.

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




  • Mephalay M kullanıcısına yanıt
    birden fazla metod yazmam lazım ondan diyor size ornek olarak soyle diyim
    add
    remove
    clear
    contain(search)
    size gibi basit metodlar bunları yazmasına yazdım(SLL) ile ama asıl sorun bunları tree ile yaparsam daha fazla suan alacagım odevden
    treeMulti set denen kavram varmış galiba suan araştırıyorum onunla olabilirmiş ama ne oldugu hakkında fikrim yok belki de boyle bir şey mümkün degildir kısaca buraya bigO larını yazayım add(1) remove(n) clear(1) contain(n)[treele yapabilseydim logn di ama bunu treele yapmam Node classımı tammen degiştirmem demek] size(1) amacım olabildigince efficient bi bag implementasyonu yapmak kendi bagımın hızlı çalışmasını istiyorum,Ogrendigime gore agaçlarla oluyormuş hocanın dedigi kadarıyla ben SLL ile yaptım bunu herkes yapar zaten onemli olan agaçla yapmakmış yani ondan sorunum bu en hızlı bag implementasyonu yapmak istiyorum bunun için en iyi yol treelermiş ben daha farkına varmadım.Aklınıza bi fikir gelirse benimle paylaşır mısınız?




  • yasaklıbaba Y kullanıcısına yanıt
    Sen tam olarak TreeSet istiyorsun iste. Comparable i implemente eden bir class ile TreeSet olustur. Yalniz sorted set'e O(1) zamanda add() yapamazsin.
    TreeMultiSet diye bir sey yok Core Java'da, Guava'da var; o da duplication a izin veriyor, senin buna neden ihtiyacin var?
    Odevin adam gibi aciklamasinin oldugu bir doc var mi? Tam olarak istenen nedir?
    Bir de yazdigin kodu paylasirsan ne yapmaya calistigini daha kolay anliycam.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • alimmm78 kullanıcısına yanıt
    sorunu cozdum ama yazamadım object yerine generic type yapsak daha güzel olur bildigim kadarıyla Objectten daha esnek calısıyor,daha sorunsuz

    buldum yollar suydu

    1-kendi hash fonksiyonum(charAt ile biraz konfigüre ederek asal sayılarla her inputtu stringe cevirip 1-2000000 arasında bir sayıya atıyorduk)
    2-java içinde gelen default hashcode bunu yapmak istemedim hazır diye
    3-ise Comparable sınıfının implement etmek idi,sanırım sonsuza kadar, çalışmayı engelleyecek durumları ignore eden bir sistemle çalışıyor.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.