Tüm programlama problemleri algoritma problemleri mi? [kapalı]


13

Cormen ve ark. bilgi aktarır. Bunun bir nedeni, her şeyin programlama problemleriyle ilgili olması ve kitabın herhangi bir programlama dilinde uygulanmamış olmasıdır. Bu dil bağımsızlığı genel olarak fikirlere odaklanır.

Yani sorum şu, başlıkta dediği gibi. Her çözülebilir programlama problemi bu algoritmik tarzda düşünülerek çözülebilir mi? Hangi dil, alan vb. Olursa olsun? Evetse, argümanlar verin, başka şeyler verin!

GUI, AI, Graphics, vb. İle birçok karmaşık program uygulamamıştım ... Ama bu tür problemler aynı zamanda iyi algoritmaları düşünmek midir?


6
Bir programcı için en yaygın sorun olan imho, "ah, demek istediğin buydu? Şimdi anlıyorum. Yine de uyguladığım şey değil, üzgünüm". Bu bir programlama sorunu mu?
keppla

1
Bu soru çok benzer.
back2dos

Müşteri ile bir rapor yapmanız, gereksinimlerini tanımlamanız ve yazılımı tasarlamak, test etmek, uygulamak, yeniden düzenleyici, optimize etmek ve bakımını yapmak zorunda olduğunuza dayanarak yapmanız gerekir. Yazılımı test etmek, geliştirmek, dağıtmak, çalıştırmak ve ölçmek için ortamlara ihtiyacınız vardır. Bu sistemde bireysel bir algoritma sadece bir uygulama detayıdır.
inf3rno

@Keppla (artı bir) ope, bu bir gereksinim problemi, tüm yazılım sıkıntılarının temel nedeni
Mawg, Monica

Yanıtlar:


29

"Programlama Sorunu" nu nasıl tanımladığınıza bağlıdır.

Gerçek dünyadaki projelerde, cevap kesinlikle açık bir HAYIR. Sorunların çoğu teknik sorunlar bile değil, iletişim sorunları, belirsiz gereksinimler vb.

Sonra hiçbir algoritma yanında gerektiren sorun sınıfları bütün konular var. Örneğin, GUI'ler genellikle "program" için basittir, ancak asıl sorun iyi bir tasarıma sahip olmaktır (sadece grafiksel görünüm değil, kullanılabilirlik açısından).

Yine de, problemlerin o alanın doğası gereği çok daha algoritmik olma eğilimi gösteren bazı alanlar vardır. Örneğin, yapay zeka, algoritmaların çekirdek olduğu birinci bir konudur. Grafikler algoritma yoğun olabilir, ancak "Grafik Programlama" ile tam olarak ne anlama geldiğine bağlıdır.

Genel olarak, programsal olarak çözdüğünüz sorun matematiksel bir gösterim için uygunsa, algoritmik alana girersiniz. Tabii ki, bu sadece kaba bir göstergedir, çünkü hemen hemen her şey için matematiksel modeller oluşturabilirsiniz. Ancak çoğu şey için normalde böyle yapmayı düşünmezsiniz.

Son örnek: Sorun, iş nesneleri için veri girmeye izin veren bir GUI oluşturmaksa, matematiksel formülasyonları fazla düşünmezsiniz. Bununla birlikte, sorun dinamik olarak değişen ve bazı önem değerlerine göre öğeleri yeniden konumlandıran bir GUI oluşturmaksa, bir matematiksel model ve algoritmik bir uygulama ile sonuçlanma olasılığınız daha yüksektir.


2
Görünüşe göre, aynı zamanda "Algoritma" yı nasıl tanımladığınıza da bağlıdır. Çok az problemin yeni algoritmalar gerektirdiğini söyleyebilirim, ancak bir bilgisayar programı sadece iki parça içerdiğinden - algoritmalar ve veri yapıları - bu algoritmalar önemsiz olsa bile tüm problemler bazı algoritmalar gerektirir. Bir algoritma matematiksel bir model değildir, bir dizi talimattır.
philosodad

Bu en katı anlamda doğrudur, ama birincisi, i++yeni derebeyim .. erm .. algoritması olarak kabul etmiyorum .
Frank

Ama ya ekleme hakkında bilmiyorsak. O zaman eklemenin tanıtımı algoritma çalışmalarımızda büyük bir yenilik olacaktır! Ve böylece daha karmaşık algoritmalar ile karşılaşıncaya kadar.
CMCDragonkai

8

Programlama problemi ile ne demek istiyorsun?

Wikipedia'ya göre:

Bilgisayar programlama (genellikle programlama veya kodlama kısaltılır), bilgisayar programlarının kaynak kodunu tasarlama, yazma, test etme, hata ayıklama ve koruma işlemidir.

yani programlama genel olarak algoritmaları kod yoluyla çevirmekten doğal olarak daha büyüktür.

Size bir örnek vermek gerekirse, şu anda sahip olduğum bir programlama problemi , birim testleri ekleyerek ve sonra yeniden düzenleyerek eski bir spagetti kaynak koduyla uğraşmak zorunda olduğum . Ayrıca doğru yerlere yorum eklemeyi, isimlerin büyük harf kullanımını normalleştirmeyi vb . İçerir. Algoritmalar ile ilgisi yoktur.

Aynı şekilde, birçok geliştiricinin görevleri algoritmalarla ilgisizdir. Örnek: uluslararasılaşma. Aynı şekilde, birçok uygulama (örneğin CRUD) kaynak kodlarında çok fazla algoritma kullanmaz (çerçevenin altında yatan koddan bahsetmez).

Şimdi, "programlama probleminde", "programlama" nın algoritmaların kod yoluyla çevirisinin eş anlamlısı olduğunu varsayarsanız, evet, mantıksal olarak herhangi bir problem bir algoritma problemi olacaktır: A × n = B × nif A = B.


Görev ve sorun arasında fark var . Kişisel sorundur değil birim testleri eklemek veya eski kodu korumak için, bu kod tabanı değil, kod algoritmaları tarafından temsil programın davranışı kendi içinde bulunduğu sorunun çözümü bu.
zxcdw

Göreviniz, açıklandığı gibi, programın davranışını değiştirmez. Muhtemelen algoritmaları içerebilen veya içermeyen diğer bazı değişiklikler için hazırlık çalışmasıdır. Ben herhangi bir yerde kimse sadece gün boyunca çalışma kodu refactor için ödenen sanmıyorum.
MarkJ

6

Bence cevap kesinlikle hayır . Algoritmalar çok daha büyük bir beceri setinde sadece yapı taşlarıdır.

Lisans derecemi AI konusunda uzmanlaştım

Temel sorun, en azından gördüğüm gibi, bilgi için iyi temsiller bulmaktı . Bu temsiller, insanların kafasındaki bilgi yapıları için iyi eşleşmeye çalışmalı ve üzerlerinde yapılan manipülasyon ve değişiklik türlerini kolaylaştırmalıdır.

Günlük programlama açısından, temel sorun, mevcut durum için doğru alana özgü dili (DSL) tanımlamaktır. DSL oluşturmanın birçok yolu vardır. Sınıfların, değişkenlerin ve yöntemlerin tanımlandığı sıradan programlama aslında bir DSL oluşturmaktır, çünkü onlar olmadan söyleyemediğiniz şeyleri söylemenize (zihinsel yapılarınızı kodla eşleştirmenize) izin verir .

Algoritmalar da önemlidir, ancak hikayenin sadece bir parçasıdır.


5

Tüm bilgisayar programlarının algoritma olduğunu söyleyebilirsiniz, çünkü istenen bir sonuca ulaşmak için bir dizi talimat yazıyorsunuz. Bununla birlikte, en zor sorunlardan bazıları bir programı bir bilgisayara aktarmada değil, yazılımı test edecek ve değiştirecek insanlara bir programla iletişimde bulunmaktadır.

Başka bir deyişle, bilgisayarlar kodunuzun insanlar için tamamen anlaşılmaz olup olmadığını umursamıyor. Onlar her iki şekilde de iyi çalışacak. Zorluk, kodu herhangi bir hatanın ağrılı bir başparmak gibi göze çarpacak kadar açık hale getirmesidir.

İlginçtir ki, üniversitede algoritmalar hakkında öğrendiğim teknik şeyler, o zamandan beri kendi başıma öğrendiğim şeylerle çoktan gölgelendi. Bu noktada, işimde bana yardımcı olmak için 3. bir üniversite derecesi almak istersem, İngilizce kompozisyonda olurdu.


2

Çoğu programlama problemi aslında sistem yönetimi problemleridir.

Bu küstahça bir cevap, ama bunun bir kişinin beklediğinden daha sık doğru olduğunu gördüm. DNS test makinesinde yanlış yapılandırıldığından, CPU / bellek / bağlantı noktalarını çalıştıran eski bir işlem hala çalışıyor, program yanlış kullanıcı kimliğiyle çalışıyor ve dolayısıyla yanlış izinleri, disk yanlış bölümlendi ve böylece alan bitti, yapılandırma dosyasının yanlış sürümü yüklendi, vb.

Algoritmaları doğru yapmak genellikle sorunun sadece küçük bir kısmıdır. Sorunun geri kalanı, programı gerçek dünyada gerçek problemleri çözmek için işe koyuyor.


"Algoritmaları doğru yapmak genellikle sorunun sadece küçük bir kısmıdır." Kaggle.com'daki sorunlar bu açıklamaya uymuyor.
Gandalf

Katılıyorum, sadece "sıhhi tesisat" kategorisine koydum. Diğer programcıların hizmetleri, API ve bazen çerçevelerle çalışmak, işleri başka birinin çalışması gerektiğini düşündüğü gibi birbirine bağlı hale getirmektir.
JeffO

2

Evet, tüm programlama problemlerinin algoritmik bir şekilde düşünerek çözülebileceğini düşünürüm. Sonuçta bir algoritma, bilgisayara ne yapacağını söyleyen bir talimatlar dizisidir.

Yukarıdaki örneklerden bazılarının alınması

Örneğin, GUI'ler genellikle "program" için basittir, ancak asıl sorun iyi bir tasarıma sahip olmaktır (sadece grafiksel görünüm değil, kullanılabilirlik açısından).

Programlama ve hatta tasarım açısından kullanıcı dostu ve verimli etkili GUI tasarımlarına yol açan kalıpları / kuralları bilecektir. Bu kurallar, uyulması durumunda kullanıcı dostu bir GUI oluşturulmasına yardımcı olacak bir algoritmaya indirgenir. Aslında, kontrollerin GUI'ye yerleştirilmesinin gerçek adımları da bir algoritmaya indirgenebilir

Size bir örnek vermek gerekirse, şu anda sahip olduğum bir programlama problemi, birim testleri ekleyerek ve sonra yeniden düzenleyerek eski bir spagetti kaynak koduyla uğraşmak zorunda olduğum. Ayrıca doğru yerlere yorum eklemeyi, isimlerin büyük harf kullanımını normalleştirmeyi vb. İçerir. Algoritmalar ile ilgisi yoktur.

Ancak, birim testleri ekleme yaklaşımına yaklaşma, aşağıdaki gibi bir algoritma ile açıklanabilir:

  1. Yeni Birim Testini belirleyin
  2. Birim Yazma Testi
  3. Büyük Harf Normalleştirme Algoritmasını Uygula
  4. Yorum algoritmasını uygula

Örnek: uluslararasılaştırma Bu algoritma çözümüne mükemmel bir örnek. En basit haliyle, bir sözlükte bilinen bir kelimeyi ararsınız ve farklı dil formuyla değiştirirsiniz. (Elbette gerçek hayat cümleleri ve bağlamı içerir ve algoritma anadili İngilizce olan kişilerle doğrulama adımları içerebilir, ancak temel bilgiler doğrudur)

Evet cevaplarının çoğuyla ilgili sorun, insanların problemin ayrıntılı tanımını bir dizi açıkça tanımlanmış mantık / kurallara indirgeyen bir dizi talimat yerine QuickSort, Bubble sıralama açısından algoritmalar düşünmesidir.

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.