Program Minimizasyonu


10

Devre Minimizasyonu , verilen bir devrenin boyutunu en aza indirmek için problemdir. Genel programlar için benzer bir şey var mı?

Özellikle benim sorum -

Belirli bir program için talimatların # sayısını en aza indirecek algoritmalar var mı? Bu karar verilemez bir sorun olduğunu biliyorum ama optimal bir şey döndüren bir çözüm aramıyorum.

Biri bunu başarmak için önceden var olan derleyici dönüşümlerini uygulayabilirken, önceden aramak için çok dar dönüşümler ve algoritmalar kümesi tanımlamak zorunda olmadığım bir şey arıyorum.

Düzenleme: Sahip olduğum diğer soru, bu semantik olarak eşdeğer programların tüm alanını keşfetmek için izin verir veya mümkün değil, sağlam ve eksiksiz bir hesap olup olmadığını.


2
Diğer sorunuzun cevabı "kalkülüs" tanımınıza bağlıdır. HALT'ın coRE içinde olmaması , bu tür tanımların çoğu için "hayır" cevabını verir.

bu iki alan, başka bir yaklaşımın, programları değişken giriş boyutları için devre ailesine dönüştürmek olduğu ile ilgilidir.fn
vzn

Yanıtlar:


10

Sınırlı boyutlu girişleri olan programlar için naif bir algoritma vardır: tüm programları artan uzunluk (veya uzunluğun sınırlı bir işlevi olan yürütme süresi) sırasına göre sıralayın. Programın orijinal ile aynı olduğunu kanıtlayabiliyorsanız, durdurun; aksi halde aramaya devam edin.

Bu algoritma sağlamdır. Tamamlanması için, reddedilen tüm programların orijinaline eşdeğer olmadığını kanıtlamanız gerekir. Bu, giriş boyutu için bir sınırınız olduğu sürece, finitary makine modellerinde mümkündür.

Programın yürütme süresi girdiye bağlı olduğunda, en uygun çözümün olmayabileceğini unutmayın. Örneğin en kötü durum sınırına bakarsanız, tüm olası sınırsız girişleri nicel olarak belirlediğinizde çok hızlı bir şekilde kararsız denkliklere ve girişler sınırlanmışsa çözülemeyen sorunlara girersiniz.

On yıl önce Rajeev Joshi, Greg Nelson ve Keith Randall'ın “Denali: Hedefe Yönelik Bir Süper Hızlandırıcı” yaklaşık 5 makine talimatından en uygun programları bulabildi. Daha yeni sonuçlara bakmadım.


5
Sussex Üniversitesi'ndeki öğrencilerimizden biri, bazı temel Java rutininin uzunluğunu kısaltmak için süperoptimisasyonu kullandı (ekleme gibi). Bunu yapmak için muazzam miktarda Amazon EC2 hesaplaması yaktı. Onun tezi burada . Açıkçası herhangi bir şey için uygulanabilir bir yaklaşım değil, gerçekten kısa programlar.
Martin Berger
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.