Bir hesaplama problemini nasıl titizlikle formüle edebiliriz?


20

Sık sık bir hesaplama problemi (veya karmaşıklığı) için bir algoritma istemek isteyen insanlarla etkileşime girerim, ancak bunu (bilgisayar bilimcileri) anlaması için titiz bir şekilde ifade etmezler.

Onları CLRS gibi kitaplara yönlendirmek yararlı değildir, çünkü oradaki örneklerin titizlikle ifade etmenin oldukça basit bir yolu vardır, örneğin bir grafiğin bitişik listesi ve içindeki iki köşe bu köşeler arasındaki en kısa yolu hesaplar.

Çok az CS bilgisi olan bir kişinin bilgisayar problemlerini bilgisayar bilimcileri tarafından anlaşılabilecek titiz bir şekilde nasıl formüle etmesi ve bildirmesi gerektiğini öğrenebileceği iyi bir kitap (veya başka bir kaynak) var mı?

Tercihen kitabın, çeşitli alanlardan ve gerçek dünya örneklerinden hesaplama problemlerinin titizlikle nasıl formüle edileceğine dair birçok örneği olmalıdır.


açıklama

Soruyu daha spesifik hale getirmek için, 1. / 2. sınıf lisans CS öğrencisi düzeyinde setler, fonksiyonlar, grafikler, listeler gibi temel matematik / CS terminolojisini bildiklerini varsayalım (ki bu benim zihin). Örneğin, Aho ve Ullman gibi bazı tanıtım ders kitaplarını okumuşlardır (ancak bunu tam olarak anlamamış olabilirler).


2
Bence bu iyi bir soru, ama iyi bir cevap olup olmadığını bilmiyorum. "Bilgisayar bilimcisi olmayan birine bilgisayar bilimcisi gibi düşünmeyi öğretebilmemizin bir yolu var mı?" Bunun cevabı "evet, onları bir bilgisayar bilimcisi yap." Bununla birlikte, bazı yazılım mühendisliği araştırmacıları bunun gibi şeyler üzerinde çalışmalar yapmış olabilirler.
jmite

3
Ayrıca, kullanım durumlarının bir dereceye kadar bunun için olduğunu düşünüyorum. Birisi sorununu nasıl doğru bir şekilde formüle edeceğini anlamıyorsa, belirli bir programın yapmasını istediklerinin birkaç senaryosunu ve her durumda beklenen davranışı listeleyin. Programcı daha sonra bundan bir spesifikasyon geliştirir. Bununla birlikte, ben bir mühendis değil, teorik biriyim, bu yüzden yanılıyorsam, beni düzeltmekten çekinmeyin.
jmite

@jmite, yorumlarınız için teşekkür ederim. Yazılım Mühendisliğinin bir kısmının bir müşterinin ne istediğini anlamaya çalışmak konusunda haklısınız (sanırım buna gereksinim analizi diyorlar ). Ancak bu genellikle büyük projeler için geçerlidir. Bu tür projelerden bahsetmiyorum, ancak bu sitede aldığımız gibi titizlikle belirtilmeyen basit sorular. İnsanlara birçok örnekle mantıklı bir ifadeyi nasıl ifade edeceklerini öğreten kitaplar gördüm. Algoritmalar ve hesaplama problemleri için benzer bir şey olmasını umuyorum.
Kaveh

1
Bununla birlikte, özellikle yetişkinler tarafından kolayca elde edilemeyen belirli bir düşünce tarzını gerektirdiğini düşünüyorum. İnsanlara teknik şeyleri bırakmalarını ve sorunu gündelik nesneler açısından mümkün olduğunca basit bir şekilde açıklamalarını sağlamaya çalıştım. Sorun şu ki, genellikle bazı kısıtlamaları unutacaklar veya gerçek sistemlerinde O (N) olan bir işlem O (1) gibi bir ses çıkartacaklardır. Bu yüzden yanlış sorunun titiz bir tanımına çok yakın bir şeyle karşılaşacağım.
svinja

2
bir şekilde, istenen şey çelişkilidir, çünkü problemleri titizlikle formüle etmek,
laymenleri

Yanıtlar:


3

bunun için iyi bir kaynak, akademisyenler tarafından oldukça iyi biliniyor, ancak uzmanların dışında çok fazla bilinmemektedir, Donald E. Knuth, Tracy L. Larrabee ve Paul M. Roberts tarafından Matematiksel Yazmadır. yayınlanmış bir kitap, ders videoları ve bir dizi not vardır. matematiksel yazıda ustalaşmaya çalışan insanlar açısından daha çok yazılmıştır, örneğin kağıt oluşturmak için, ancak tüm tavsiyeler, problemleri tam olarak formüle etmeye çalışan laymen davası için son derece geçerlidir. matematiksel yazma öğrenmek için müthiş iken titizlikle formüle-kitap detayları gibi, / tanımlamak için bilimsel yaklaşımdır çözmek , örneğin aracılığıyla algoritmalar veya deliller-hesaplamalı / algoritmik problemler.

ayrıca, klasik Garey & Johnson metni, Bilgisayarlar ve Sürdürülebilirlik, problemlerin tam olarak nasıl formüle edileceğini tam olarak açıklamaz, ancak benzer problemlerin bölümleri halinde düzenlenmiş birçok örnek ve çeşitli teorik / kavramsal / teknik "kalıplar" sağlar. hesaplama / algoritmik problemleri tanımlamak için "yapı taşları" olarak kullanılır.


Teşekkürler vzn, bunlar matematik yazmakla ilgili güzel kaynaklar ama farklı bir şey aramıyorum. Mesele matematikte iyi yazmak değil, insanların hesaplama problemlerini nasıl net bir şekilde formüle edeceğini öğrenmeleri için kaynaktır, böylece bir uzman soru soran kişinin ne aradığını anlayabilir ve onlara yardım edebilir.
Kaveh

yw; Bunların iki farklı şey olduğunu söylüyorsunuz ve kelimeler / kelime öbekleri, ama ben de [yazılım mühendisliği ifadesi ödünç almak için] "sıkı sıkıya bağlı"
vzn


0

Algoritmalar ve Veri Yapıları kitabını Robert Lafore'den satın alın.

Bu kitapta, her algoritma bir şiir gibi bir hikaye olarak açıklanmaktadır. Daha sonra kişiye bir algoritmanın Lafore sürümünü ve daha sonra CLRS sürümünü verin.

Belki bu şekilde, kişi sezgisel açıklamadan titiz olanlara nasıl tercüme edileceği konusunda bir fikir edinir.

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.