Kısıtlamalarınız göz önüne alındığında, istediğiniz şey mümkündür.
analiz
Karma tablonun gücü, hızlı arama ve ekleme hızıdır. Bu hızı elde etmek için, tablodaki herhangi bir düzen benzemesinden vazgeçmek gerekir: yani girişlerin hepsi karışıktır. Listenin tablo girişi olarak kullanılması kabul edilebilir, çünkü çaprazlama O (n) iken, karma tablonun yeterince büyük olduğu ve tabloda depolanan nesnelerin kaliteli bir karma algoritması kullanılarak karma yapıldığı varsayıldığında listelerin kısa olma eğilimindedir.
İkili bir arama ağacının (BST) hızlı eklenmesi ve O (log 2 n) araması vardır . Ayrıca depoladığı öğelere bir kısıtlama getirir: öğeleri sipariş etmenin bir yolu olmalıdır. Ağaçta depolanan iki A ve B elemanı göz önüne alındığında , A'nın B'den önce gelip gelmediğini veya eşdeğer bir sıraya sahip olup olmadıklarını belirlemek mümkün olmalıdır .
Karma tablo böyle bir kısıtlama getirmez: karma tablodaki öğelerin iki özelliği olmalıdır. İlk olarak, eşdeğer olup olmadıklarını belirlemenin bir yolu olmalıdır; ikinci olarak, deterministik bir karma kodu hesaplamanın bir yolu olmalıdır. Sipariş bir gereklilik değildir.
Karma tablo öğelerinizin bir sırası varsa, aynı karma koduna (çarpışmalara) sahip nesneleri tutmak için bir BST'yi karma tablo girişi olarak kullanabilirsiniz. Bununla birlikte, O (log 2 n) araması ve eklemesi olan bir BST nedeniyle , tüm yapı (karma tablo artı BST) için en kötü durum, bir listeyi tablo girişi olarak kullanmaktan teknik olarak daha iyi olduğu anlamına gelir. BST uygulamasına bağlı olarak, bir listeden daha fazla depolama alanı gerektirir, ancak büyük olasılıkla daha fazla değil.
Normalde bir BST'nin genel giderleri ve davranışının, karma tablo kovaları olarak gerçek dünyadaki durumlara hiçbir şey getirmediğini unutmayın , bu nedenle bir listenin teorik zayıf performansı kabul edilebilir. Başka bir deyişle, karma tablosu, her bir listeye (grup) daha az öğe yerleştirerek listenin zayıflığını telafi eder. Bununla birlikte : Sorun özellikle karma tablo ifade edemez boyut artış, ve çarpışmalar bir karma tabloda tipik olandan daha sıktır.
uygulama
Buraya kod koymayacağım çünkü dürüst olmak gerekirse gerçekten gerekli değil ve yine de bir dil vermediniz.
Yapacağım şey, dilinizin standart kitaplığının içerdiği standart karma tabloyu yeni bir sınıfa kopyalamak, daha sonra tablo kovası türünü listeden bir ağaca değiştirmek. Dile ve standart kütüphanesine bağlı olarak, bu çok önemsiz bir şey olabilir.
Normalde bu şekilde kopyala ve yapıştır kodlamasını savunmam. Ancak, savaşta test edilmiş bir veri yapısını çok hızlı bir şekilde almanın kolay bir yoludur .