Önce başka bir algoritma bularak bir işlevi hesaplayan bir algoritma kavramı var mı?


14

Doğru anlamak için, gerçek bir fonksiyonu değerini hesaplar bir algoritma hesaplama karmaşıklığı sahiptir , aşağıdaki dayanırsa: Biz işlem zaman hassas mertebesindedir gerektirir adımları .fO(g(n))fδg(n)

Biz ilk "hesaplama için daha etkili bir algoritma bulduğu bir algoritma varsa Ancak, ne " ve sonra hesaplar ?ff

Başka bir deyişle, aşağıdakileri yapan bir algoritmasına sahipsek :A

  1. Hesaplama için etkili bir algoritma bulun .Bf

  2. hesaplamak için kullanın .Bf

Bu durumda, örneğin i hesaplamak için gereken hesaplama zamanından artık söz edemeyiz , çünkü Algoritma zaten algoritmasını bulup bulmadığına bağlıdır . Diğer bir deyişle, işlem süresi işlem için gerekli ise birinci comoputed sayıda işlem için gerekli hesaplama süresi çok daha büyük olduğu sonra önceden hesaplanır.f(5)ABf(5)5f(5)f(3)

Sorum şu: Bu tür bir algoritma hakkında, bir işlevi hesaplamadan önce başka bir algoritma bulan bir kavram / teori var mı? Özellikle, bu tür algoritmaların hesaplama karmaşıklığının analizini merak ediyorum.


1
Mathematica'nın temelde sorduğunuz şeyi yaptığını söyleyebilir misiniz? Çözmek için denklemler verirsiniz ve bu denklemleri çözmek için hangi algoritmanın kullanılacağını otomatik olarak çözer, sonra çözer.
user541686

Check out itu.dk/people/sestoft/pebook tekrar ilgili.
Nathan Ringo

Yanıtlar:


18

İyi bilinen bir algoritma, Levin'in çalışma modu aynı olan evrensel arama algoritması var. Örneğin, tatmin edici olması garanti edilen bir formül için tatmin edici bir ödev bulma problemini düşünün. Levin'in evrensel araması tüm potansiyel algoritmaları paralel olarak çalıştırır ve herhangi bir algoritma tatmin edici bir ödev verirse, bu ödevi durdurur ve çıktılar. Sorun için optimal algoritma zamanında çalışıyorsa , Levin algoritması doğru uygulandığında zamanında muhtemelen büyük bir sabitle) çalışır.O ( f ( n ) )f(n)O(f(n))

Levin'in algoritması pratik olmasa da (ilgili büyük sabitler nedeniyle), teorik olarak çok ilginçtir. Evrensel arama hakkında daha fazla bilgi için Scholarpedia makalesine bakın .


10

Diyelim ki fbir tür argümanı alan xve bir tür Aargümanı yalan Bve bir tür sonucu döndüren başka bir fonksiyon çıktı C. Kelimelerinizde, fbir argüman xalır ve tür girişlerini alan ve tür Bsonuçlarını çıkaran bir "algoritma" döndürür C.

İşlevin ftürü vardır

A → (B → C)

Gerçekten de, x : Abir tür işlev alır ve döndürür B → C. Ama böyle bir fişlevi eşdeğerdir g : A × B → Calır hem x ve ybir defada ve sizlere sonucu verir. Gerçekten de, türler arasında bir izomorfizm vardır

A → (B → C)

ve

A × B → C

Biz tanımlayabilir çünkü gaçısından folarak

g(x, y) := f(x)(y)

ve tanımlayabilir façısından golarak

f(x) := (y ↦ g(x,y))

Dan geçen çalışması giçin fdenir tımar ve fonksiyonel programcılar hep kullanırım. Hesaplanabilirlik teorisinde, bir girdi alma ve bir fonksiyon (algoritma) çıkarma fikri smn teoreminde somutlaşır .

Sorunuzun cevabı "evet, insanlar bunu her zaman yapar" dır. Ama aynı zamanda bir ahlaki de var: bir algoritma bulan bir algoritma hala sadece bir algoritma.


1
Bu son cümle için +1. İyi dedi.
John Coleman

msgstr "bir algoritma bulan bir algoritma hala sadece bir algoritmadır". Evet bu doğru, ama temel bir fark var. Eğer bir "doğrudan" algoritma iki kez hesaplarsa , bunu yapmak için adımlarına mal olur, burada kez hesaplamak için gereken adımlardır . Öte yandan, eğer başka bir algoritma Hesaplamalar arar o bir algoritma bu o maliyeti adımları, birinci hesaplama maliyetidir ve ikinci ve olasılıkla ölçüde, Daha büyük. İlgilendiğim fenomen buc + c c f ( 5 ) f ( 5 ) c 1 + c 2 c 1 c 2 c 1 > c 2f(5)c+ccf(5)f(5)c1+c2c1c2c1>c2
user56834

@ Programmer2134 derleyici optimizasyonları ilgilendiğiniz kavram olur mu? Bunun arkasındaki teoriden hiç emin değilim (özellikle karmaşıklık teorisi ile etkileşimleri), ancak bu potansiyel bir örnek olabilir
Mark

Aranacak terim "kısmi değerlendirme" dir.
Andrej Bauer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.