Bir trie, problem çözme araç kutunuza mükemmel bir ek olabilecek etkili bir veri yapısıdır. Bakalım, standart bir set veya harita uygulamasından hangi alanlarda trie kullanımının daha uygulanabilir olduğunu görelim. Ve onu kullanarak başka ne gibi avantajlar elde edebilirsiniz
Önek ağacı en doğru tanım olmasına rağmen, trie adını önek ağacı veya dijital ağaçtan daha çok seviyorum. Trie adı geri getirilmeden gelir ancak "ağaç" değil, "dene" olarak okunur. Buradaki fikir, trie'yi ağaçtan ayırmaktı.
Trie'nin ne olduğunu tahmin etmeye çalışın. Trie'yi 4 kelimeden inşa ettim: elma, muz, piç, yasak:
Bir üçlü ile oynamak için San Francisco Üniversitesi'nden bir görselleştirme aracı kullanmanızı şiddetle tavsiye ederim .
Trie, kompakt bir şekilde bir dizi (genellikle bir dize) olarak temsil edilen anahtarları depolar. Ardından, anahtarları sorgulamak için bir küme veya karma harita olarak kullanabilirsiniz. Buna ek olarak, anahtar önekiyle anahtarları ve değerleri sorgulama fırsatı elde edersiniz.
Optimal algoritmaya odaklanmıyorum. Bu makalenin amacı, sizi trie ile tanıştırmak ve onu ne zaman kullanabileceğinizdir.
İstenilen bir API tasarlayalım:
Bu iki işlevi uygulamak yeterli olacaktır: Ekleme ve İçerme, fikri kavramak için. Ve aşağıdaki iyileştirmeler için makul bir temel olacaktır.
Genel rune trie'yi uygulayarak başlıyorum. Go'da rune, ASCII'nin bir üst kümesidir ve Unicode kod noktalarını temsil eder. Bunu Java veya C'de char türü olarak düşünün, ancak Unicode için.
Yani, herhangi bir optimizasyon olmadan Ekle işlevi vardır, sadece ilk saf uygulama:
Algoritma basittir:
Son düğüme kadar bir ağacı harflerle geçiyoruz.
Bu uygulamayı kıyaslayalım. Go, bunun gibi basit karşılaştırma testleri yazmak için araçlara sahiptir:
Ve sonra karşılaştırmayı çalıştırıyoruz:
Go bench aracı yığın tahsislerini saymaz, bu yüzden Contains fonksiyonunun herhangi bir yığın tahsisatı içermediğini görüyorum, bu mükemmel.
Trie yapısı, normal bir karma harita için uygun olmayan bir işlev daha eklememizi sağlar - SearchByPrefix:
İşlev optimize edilmemiştir, ancak bunun mümkün olduğunu ve o kadar karmaşık olmadığını gösterir. Daha önce tanımlanan işlevi çağırır
nodeByPrefix.
Trie, kelimeleri öneke göre aramaya izin verdiğinden, otomatik tamamlama algoritmaları için iyi bir adaydır.
Dilerseniz daha derine dalabilirsiniz .
Eğer ihtiyacın varsa:
Örneğin, uygulama başlangıcında bellekteki alt etki alanları dahil olmak üzere bir dizi etki alanı oluşturur ve ardından yalnızca onu sorgularsınız. Bu görev için bir üçlü düşünebilirsiniz.
Ama yine de, performans varsayımlarınızı her zaman kıyaslamalarla kontrol edin.
Öneke göre aramanız gerekmiyorsa ve veri yapınız çok değişiyorsa, bir karma harita veya karma set daha iyi bir alternatiftir.
Örnek bir trie uygulaması olan iki heyecan verici kütüphane buldum:
İlk olarak https://scalabledeveloper.com adresinde yayınlanmıştır .
K-NN, tahmine dayalı modelleri artırmak için bir özellik mühendisliği olarak kullanılabilir. İstatistikteki son gelişmelerin çoğu, klasik istatistiksel yöntemler olarak sınıflandırılan tahmin modellerine ayrılmıştır.
Bu makale, daha önce Tower Research Capital'de SDE-II olarak çalışmış olan Programming Pathshala'nın Kurucu Ortağı Bharat Khanna tarafından sağlanmıştır. Rekabetçi Programlama Dünyası gerçekten çok geniştir.
2019'da California Senfoni'den başka bir klasik müzik kurumuna liderlik etmeden önce bir organizasyonun ötesinde daha geniş bir etki yaratmaya karar verdiğim duyurusu çıkınca baraj kapıları en iyi şekilde açıldı. Birkaç ay sonra, koronavirüs bildiğimiz şekliyle işi aniden durdurduğundan, organizasyonlarımız ve alanımız için yeni sorular ve zorluklar ortaya çıkardığı için tüm çalışmalarımız mümkün olduğunu düşündüğümüzden daha fazla değişti.
Vincent Van Gogh yaptı ve Pablo Piccaso da yaptı. Sanatçılar birçok nedenden dolayı tuvallerin üzerine resim yaptılar.
Bu yazıda, yazılım sektöründe çalışırken edindiğim bazı deneyimleri ve bu durumların üniversitede yaşadıklarımdan nasıl farklılaştığını sizlerle paylaşacağım. Programlama öğrenmek için var olan sayısız yoldan, üniversite dereceleri genellikle toplumda çok yüksek puan alır ve saygı görür ve birçok insanın aldığı bir yoldur.
K-Beauty batıda kısa bir trendden daha fazlası olduğunu kanıtlamış olsa da, hala daha derin sorunlar var. Güzellik, kişisel bakım veya popüler kültür trendleriyle ilgileniyorsanız, muhtemelen K-Beauty'yi duymuşsunuzdur.
Al Pacino, 'Ve Herkes İçin Adalet' doruk noktasını yeniden yazdığını söyleyerek Norman Jewison'ı şaşırttı. Ama Pacino'nun nedenleri vardı.
Kelly Dodd, 'RHOC' Sezon 16'dan çıkarıldı ve Heather Dubrow portakalı için geri döndüğü için geri dönmeyecek.
Kevin Hart kısa süre önce iptal kültürüne karşı çıktı ve mükemmel olması beklenen tek kişinin halk figürleri olduğunu belirtti.
'Sopranos'un sonlarında, yazarlar Tony Soprano için alternatif bir kimlik oluştururken Alfred Hitchcock etkisine gittiler.
O mükemmel kahve için dünyayı mı arıyorsunuz? Belki de kendi kahve çekirdeklerinizi kavurmanın güzel sanatlarını ve bilimini öğrenmenin yolu budur.
Yaratılış'ta sadece kısa bir kez ortaya çıkıyor, ancak İsa Mesih'in habercisi olarak görülüyor. O gerçekte neydi ve İsa ile nasıl ilişkilendirildi?
Mississippi'de fakir bir ortakçı ailesinde dünyaya gelen Fannie Lou Hamer, Şiddetsiz Öğrenci Koordinasyon Komitesi (SNCC) için saha sekreteri ve sivil ve oy hakları için yorulmak bilmeyen bir savaşçı oldu.
Modern uygarlık giderek yarı iletkenlere bağımlı hale geliyor, ancak tedarik zinciri COVID-19 pandemisi, kuraklıklar ve talep artarken diğer sorunlar tarafından kesintiye uğradı.
Getireceği yükü bir düşünün. MLB sezonu ilerledikçe, Sıcak Soba ısınıyor.
Xavien Howard Xavien Howard'ın NFL'deki en iyi köşe oyuncularından biri olduğuna dair çok az soru var. Geçen sezon 10 - TEN - müdahalesi vardı.
Spor salonunda ne yapacağınız konusunda çelişkili tavsiyeler bulmak için uzağa gitmenize gerek yok. Bazı insanlar size belirli egzersizleri hiç yapmamanızı söyleyecektir; diğerleri, dirseklerinizin bir presin tepesinde ne kadar düz olması gerektiği gibi ayrıntıları tartışacaklar.
Bütün bebekler ağlar. Ama bazı bebekler çok ağlar.
Liberty County Şerif Ofisi'ne göre, 37 yaşındaki Robert Eugene Hoffpauir tutuklandı ve 60 yaşındaki Roman Rodriguez'i öldürmekle suçlandı.
Leona Lewis Instagram'da, "İnsanlar özür dilediğinde (Chrissy) ve eylemleri için samimi bir pişmanlık ve rehabilitasyon gösterdiğinde, onları kucaklamalıyız ve düştüklerinde onları tekmelemeye çalışmamalıyız" dedi.
Kelsey Grammer, başrolü paylaştığı Paris Jackson ile ilk kez daha gençken tanıştı ve babasıyla Michael Jackson arasında çok güzel bir ana tanık oldu.
54 yaşındaki Jeff Tremaine, eski televizyon yıldızının kendisine ve ailesine ölüm tehditleri göndermesinin ardından 41 yaşındaki Bam Margera hakkında uzaklaştırma emri başvurusunda bulundu.