Göre Pippenger [1996] veri mutasyona olabilir biri saf olmayan Lisp için yazılmış bir algoritmaya (yavaş olmayan ve katı bir değerlendirme semantik vardır) tamamen işlevsel olan bir Lisp sistemi karşılaştırırken, O (çalışacak şekilde n ) tercüme edilebilir saf Lisp'de O ( n log n ) zamanında çalışan bir algoritmaya ( Ben-Amram ve Galil [1992] tarafından sadece işaretçiler kullanılarak rasgele erişim belleğini simüle etme konusundaki çalışmalarına dayanarak ). Pippenger, yapabileceğiniz en iyi algoritmalar olduğunu da belirler; saf olmayan sistemde saf sistemde are ( n log n ) olan O ( n ) problemleri vardır .
Bu yazı hakkında yapılması gereken birkaç uyarı var. En önemlisi Haskell gibi tembel fonksiyonel dilleri ele almamasıdır. Bird, Jones ve De Moor [1997] , Pippenger tarafından oluşturulan sorunun O ( n ) zamanda tembel bir işlevsel dilde çözülebildiğini , ancak bunların (veya bildiğim kadarıyla hiç kimsenin olmadığını veya Tembel bir işlevsel dil, mutasyonlu bir dil ile aynı asimtotik çalışma süresindeki tüm sorunları çözemez.
Pippenger'ın gerektirdiği sorun Ω ( n log n ) bu sonucu elde etmek için özel olarak inşa edilmiştir ve pratik, gerçek dünya problemlerini temsil etmek zorunda değildir. Sorun üzerinde biraz beklenmedik, ancak ispatın çalışması için gerekli olan birkaç kısıtlama vardır; özellikle sorun, gelecekteki girdilere erişemeden sonuçların çevrimiçi olarak hesaplanmasını ve girdinin sabit bir boyut kümesi yerine sınırsız olası atom kümesinden oluşmasını gerektirir. Ve kağıt, doğrusal çalışma süresinin saf olmayan bir algoritması için sadece (alt sınır) sonuçlar oluşturur; daha uzun çalışma süresi gerektiren sorunlar için, ekstra O (log n) doğrusal problemde görülen faktör, daha uzun çalışma sürelerine sahip algoritmalar için gerekli olan ilave işlemler sürecinde "emilebilir". Bu açıklamalar ve açık sorular Ben-Amram [1996] tarafından kısaca araştırılmıştır .
Uygulamada, birçok algoritma, değişebilir veri yapılarına sahip bir dilde olduğu gibi aynı işlevsellikte saf işlevsel bir dilde uygulanabilir. Tamamen işlevsel veri yapılarını verimli bir şekilde uygulamak için kullanılacak teknikler hakkında iyi bir referans için bkz. Chris Okasaki'nin "Tamamen Fonksiyonel Veri Yapıları" [Okasaki 1998] (tezinin genişletilmiş bir versiyonudur [Okasaki 1996] ).
Tamamen işlevsel veri yapıları üzerinde algoritmalar uygulamak isteyen herkes Okasaki'yi okumalıdır. Dengeli bir ikili ağaçla değişken belleği simüle ederek işlem başına her zaman en kötü O (log n ) yavaşlamasını sağlayabilirsiniz, ancak çoğu durumda bundan daha iyi yapabilirsiniz ve Okasaki, itfa edilmiş tekniklerden gerçeğe itfa edilen işi aşamalı olarak yapan zamanlardır. Tamamen işlevsel veri yapıları ile çalışmak ve analiz etmek biraz zor olabilir, ancak derleyici optimizasyonunda, paralel ve dağıtılmış hesaplamada ve sürüm oluşturma, geri alma ve geri alma gibi özelliklerin uygulanmasında yardımcı olan referans saydamlığı gibi birçok avantaj sağlar.
Tüm bunların sadece asimptotik çalışma sürelerini tartıştığını da unutmayın. Tamamen işlevsel veri yapılarını uygulamak için birçok teknik, çalışması için gerekli ekstra defter tutma ve söz konusu dilin uygulama detayları nedeniyle size belirli miktarda sabit faktör yavaşlaması sağlar. Tamamen işlevsel veri yapılarının faydaları bu sabit faktör yavaşlamalarından daha ağır basabilir, bu nedenle genellikle söz konusu soruna dayanarak ödünleşmeler yapmanız gerekecektir.
Referanslar
- Ben-Amram, Amir ve Galil, Zvi 1992. "Adreslere Karşı Göstericiler Üzerine" ACM Dergisi, 39 (3), s. 617-648, Temmuz 1992
- Ben-Amram, Amir 1996. "Pippenger'ın Saf ve Saf Lisp Karşılaştırması Üzerine Notlar" Yayımlanmamış el yazması, DIKU, Kopenhag Üniversitesi, Danimarka
- Bird, Richard, Jones, Geraint ve De Moor, Oege 1997. "Daha fazla acele, daha az hız: tembel ve istekli değerlendirme" Fonksiyonel Programlama Dergisi 7, 5 s. 541-547, Eylül 1997
- Okasaki, Chris 1996. "Tamamen Fonksiyonel Veri Yapıları" Doktora Tezi, Carnegie Mellon Üniversitesi
- Okasaki, Chris 1998. "Tamamen Fonksiyonel Veri Yapıları" Cambridge Üniversitesi Yayınları, Cambridge, İngiltere
- Pippenger, Nicholas 1996. "Saf Karşı Safsız Lisp" ACM Programlama Dilleri Prensipleri Sempozyumu, sayfa 104-109, Ocak 1996