Algoritma nedir?


12

Algoritma ne demek olduğu gibi algoritma tam olarak nedir? Kelimeyi anladığım kadar az şey, belirli bir dile veya tasarım modeline özgü olmaması, en temel ilkelerden biridir (bu yüzden sanırım bu soru beni aptalca gösteriyor).

Anladığım "seçeneklerden" biri, sahte kodda bir liste olarak yazılabilecek bir şey yapma yöntemi anlamına geliyor.

Daha karmaşık kod yazarken, ne yapılması gerektiğini, neyi ve nasıl alacağımı düşünüyorum (programlama dilinde değil), sonra bunu kodla yaz. Bunun için iyi bir yol mu ve algoritmalarla ilgili bir şey var mı?

(Burada Stackoverflow yerine sormak istedim, çünkü belirli bir sorun / dil ile ilgili değil artı buradaki insanların çoğunun 'nedenini' bildiğini veya en azından buradaki yanıtların Stackoverflow yerine daha ayrıntılı olduğunu hissediyorum. farklı olduğu yerde, orada sormam gerekip gerekmediği için özür dilerim)



1
@Apalala: Bu sınırlamaların geçerli olduğunu düşünmüyorum.
Josh K

2
@Apalala: Sonlu , bilinmiyor .
Josh K

2
@Jonathan: "Aramam gereken kelimeler"? Hangi kelimeler? Be özgü . Bu site sihir değil. Seni tanımıyoruz. Ne okuduğunu bilmiyoruz. Sizi neyin karıştırdığını bilmiyoruz. Lütfen belirli .
S.Lott

1
@Apalala: "Sonlu", "sınırlı" anlamına gelir, başka bir şey değildir. Bir algoritmanın bir ara durması garanti edilir. Sonlanacağını tahmin etmenin bir yoluna sahip olduğunuzu kanıtlamak çok daha kolaydır, bu nedenle algoritmalar öngörülebilir olma eğilimindedir, ancak öngörülebilirlik algoritmaların olağan tanımında değildir.
David Thornley

Yanıtlar:


19

Bir algoritma, iyi tanımlanmış bir bitiş durumunda sona eren bir işlevi hesaplamak (veya bir prosedürü yürütmek) için iyi tanımlanmış talimatların sonlu bir dizisidir.


1
+1. "Sonlu, İyi Tanımlanmış ve Etkili" Wikipedia girişindeki üç kriterdir. Burada üçünüz de var.
S.Lott

@ Jörg tarafından aktarılan videoları izlemeye hazırım, ancak şu anki bakış açım sadece adımların sınırlı olması değil. Kaynaklar (zaman dahil) sınırlı değilse, prosedür bir algoritma olarak çağrılabilir veya herhangi bir şey olarak etiketlenebilir .
Apalala

@Apalala - Ders kitaplarıma geri dönüyorum ve bu kısıtlamayı hiçbir yerde göremiyorum. Bu bir için mümkündür belirli veri seti ya da giriş bir algoritma (hiç bitmeyen bir döngü içinde sıkışıp olabilecek bir kök bulmak için Newton-Raphson yöntemiyle gibi algoritmalar) sona olmayabilir, ama bu algoritmayı değil bir algoritma yapmaz.
John Bode

John Titreşimleri Newton-Raphson'da rutin olarak tespit edilebilir.
Apalala

1
@Apalala: Bu bir algoritma yerine bir programın tanımına benziyor . Bu ayrık adımlar fikri Turing makinelerinde, kayıt makinelerinde, rastgele erişimli makinelerde ve tabii ki gerçek fiziksel bilgisayarlarımızda, hemen hemen her programlama dilinde ve hatta daha örtük de olsa lambda hesabında mevcuttur. Ancak bu, algoritmaların doğasında olmayan keyfi bir kısıtlamadır . Analog algoritmaları, örneğin yok değildir (olup, aslında farklı basamaklara sahip tanımı analog algoritması) ve bunlar için aslında bir analog bilgisayarla uygulanabilir.
Jörg W Mittag

15

Bu aslında oldukça ilginç bir soru ve aslında hala açık bir araştırma sorusu.

Algoritma Teorisinin devlerinden Yuri Gurevich, şu anda Microsoft'un topluluk web sitesi Channel9'da bir video konferans serisi veriyor:

Gördüğünüz gibi, asıl sorunuz aslında ikinci dersin başlığı. Ancak, üçünü de izlemenizi şiddetle tavsiye ederim.

İlki, özellikle, buradaki diğer cevapların çoğunda verilen tanımların hemen hemen tamamını geçersiz kılan birkaç algoritma örneği içerir.


2
Bağlantılar için teşekkürler. Bir algoritma tanımının bir parçası olarak ilk videoya eşlik eden metinde aşağıdakileri görürsünüz: "sonunda son bir bitiş durumunda sonlandırma". Sonlandırma, algoritma tanımının önemli bir parçasıdır. Bu nedenle işletim sistemleri ve sonlandırılmayan sunucular algoritma değildir.
LIProf

4

Algoritma iyi bir yemek tarifi gibidir . Bazı girdileriniz, bazı iyi tanımlanmış ara adımlarınız var ve sonuç elde edersiniz.

Programlamaya uygulandığında, belirli bir sorunu çözmek için yapmanız gereken adımların açık bir açıklamasıdır. Seçtiğiniz programlama dilinde yazabileceğiniz her şey bir algoritma olarak görülebilir - ancak bu terim yalnızca sıralama veya arama gibi genel mantıksal veya matematiksel görevler için kullanılır.


Kesinlikle nihai sonuç vermeyen birçok algoritma vardır. Örneğin bir işletim sistemi veya bir web sunucusu, nihai bir sonuç vermenin genellikle hata olarak kabul edildiği bir algoritmadır.
Jörg W Mittag

@ JörgWMittag ama bir işletim sistemi veya web sunucusu "algoritma" mı? Bence değiller - algoritmalarını kullanarak alanlarının alt problemlerini çözebilirler - ve her durumda, kesinlikle nihai bir sonuca ihtiyaçları var - ama aynı zamanda algoritma olmayan parçalara sahipler ve bir bütün olarak t algoritmaları. (Başka bir yorumda söylediğiniz gibi - İşletim sistemleri ve web sunucuları programlardır, ancak algoritmalar değildir ).
Andres F.

2

Algoritma, problem çözme için kullanılan bir dizi kural veya işlemdir (hesaplamada). Temel olarak, bir sorun var, bir çözüm istiyorsunuz ve bu çözümün süreci bir algoritma. Bir algoritma, bir çözüme ulaşmak için sınırlı bir kural / süreç kümesine sahiptir.

Edsger W. Dijkstra gibiyseniz , algoritmanızı bir kağıda yazacak ve algoritmalarınızdan memnun kalana kadar algoritmayı kağıt üzerinde çalışacak / hassaslaştıracaksınız. Aksi takdirde (özellikle belge yazarken), bir algoritmanın / sürecin akışını diyagramatik olarak temsil etmek için bir akış şeması kullanılır. Bu, başkalarının akış şemasını eleştirmesini ve gerekirse iyileştirilmesini sağlar (hangi programlama dilinin gerekli olduğu konusunda endişelenmeden).

Bunun sorunuza cevap verip vermediğini bilmiyorum.


"Sıralı değil" anlamına gelen set kelimesini sevmiyorum. Matematik alanında kalmak için "dizi" veya olay tuple tercih ederim
BenjaminB

@ Ubiquité, Set mutlaka "sipariş edilmedi" anlamına gelmez. Bir seti istediğiniz sıralamada sınıflandırabilirsiniz (örneğin rastgele bir sıralama). Yine de, insanların "set" kelimesini yorumlaması nedeniyle aşağı oy gerektirmez. Ayrıca, algoritmaların bir parçası olan bir grup kümesi olan bir bileşik setiniz olabilir. Dolayısıyla "set", bir soruna algoritmik bir çözüm olarak uygun şekilde kullanıldığı sürece herhangi bir şey olabilir.
Buhake Sindi

Ben inmedim!
BenjaminB

Üzgünüm, seni alçaktan suçlamak istememiştim. Downvoter açıkça downvote için nedenler sağlamalıdır.
Buhake Sindi

1

Algoritma: 1) açık ve 2) etkili bir şekilde hesaplanabilir, böylece ilk işlemden başlayarak işlemlerin yürütülmesi, sınırlı sayıda işlemden sonra bir sonuç üretir.


Karşı örnek: bir işletim sistemi. Bu bir sonuç üretmez hiç genellikle bir hata olarak kabul edildiğini, aslında,.
Jörg W Mittag

@ Jörg, OS, birlikte alındığında, uygulamalara sistem hizmetleri sunmanın genel sonucunu üreten birçok sonuç üretir.
ThomasMcLeod

@ JörgWMittag Size diğer yorumlarda söylediğim gibi, gözleminize bir sonuç bir işletim sistemi aslında bir algoritma değildir;)
Andres F.

1

Algoritma Bir sorunu çok basit ve etkili bir şekilde çözmek için kullanılan ardışık adımların (bu adımlar hesaplamalar, veri işleme ve muhakeme görevleri olabilir) birleşimidir.

Sınırlı bir alan ve zaman içinde ifade edilebileceği şekilde en verimli şekilde tasarlanmıştır. herhangi bir programlama dilinde uygulayabiliriz.

Bir algoritmanın özellikleri: bir algoritmanın ana özellikleri şunlardır: -

Bir algoritmanın benzersiz bir adı olmalıdır. Açıkça tanımlanmış girdi ve çıktı kümelerine sahip olmalıdır. Bir algoritma, kesin işlemlerle sıralı bir sırada olmalıdır. Bir bitiş noktasına sahip olmalıdır, yani sınırlı bir süre içinde durur. Algoritma Tasarımı ve Analizi hakkında bilgi edinmek için buraya tıklayın


0

Terimi belirli bir sorunu çözmek için bir formül tanımlamak için kullanıyorum. Formülün matematikle yazılması veya bir yöntemle 1: 1 ilişkisi olması gerekmez. Okulda algoritmalar ve veri yapıları yakından ilişkilidir ve matematik formülleri olarak yazılabilir veya ispat kullanılarak kanıtlanabilir.


0

Algoritma, bir bilgisayar programının soyutlamasıdır ve sonlu sayıda adımda iyi tanımlanmış bir görevi gerçekleştirmek için bir dizi talimattan oluşur, ancak adım sayısındaki sınır çok büyük olabilir ve tek tek adımlar karmaşık olabilir ( sınırlı) görevleri kendi başlarına. Genel olarak algoritmik olarak bilinen (doğru) programlar olsa da, hepsi algoritmik parçaları bir düzende tekrarlayarak çalışır. (Daha ilginç olan, fesih durumu bilinmeyen programlar, ancak çoğu programcı aslında bu tür şeylerle kasten ilgilenmiyor; bilmediğimi biliyorum!)


0

IMO kimse oldukça bilir :) Ben terim için, matematiksel hesaplama fonksiyonlarına sadece uygulanan gördüğüm herhangi girdi alır ve çıktı üretir ve işlevin bir şey üzerinde operasyon giriş ve gerçekleştirir çeşit sürer.

Aşağıdakilerden herhangi birini / tümünü bir algoritma olarak değerlendirir misiniz?

  1. 20 yıllık bir süre zarfında bir kredinin faiz oranını hesaplayan bir fonksiyon
  2. Bir kredi başvurusuna tüm bilgilerin girilip girilmediğini kontrol eden iş mantığı
  3. Bir finderMüşteri nesne için bir veritabanını sorgular işlev
  4. Veri girişini temizleyen ve biçimlendiren "yardımcı" işlev
  5. XML dosyasını ayrıştıran ve verileri iş nesnelerine eşleyen bir işlev
  6. Girdiyi alan ve bunları bir metin dosyasına yazan bir sınıf

0

Bir Algoritma bir fikir, bir yöntem, bir teknik hesaplama veya doğada soyut bir görevin yürütülmesi için "smarts", ama gerçek dünyada bilgisayarlarda çalışır gibi biz talip kullanımı için mümkün olduğunca az kaynak olarak bilgisayar dünyasında, Zaman ve bellek.


0

Algoritma, sınırlı sürede sonuç veren iyi tanımlanmış adımların bir dizisidir.

İyi tanımlanmış adım: Bu, tam olarak tanımlanmış yapabileceğiniz veya hesaplayabileceğiniz bir şeydir. Sadece adımı okuyarak ne yapmanız gerektiğini ve nasıl yapılacağını bilirsiniz. Özellikle, bildiğiniz bir programlama dilinde yazabilir ve program parçasının adımla tam olarak eşleştiğinden emin olabilirsiniz.

Sıra: Adımlar belirtilen sırayla yürütülür. Adımlar, verilere (döngüler) bağlı olarak birden fazla kez yürütülebilir veya verilere (if ifadeleri) bağlı olarak hiç yürütülemez. Paralel algoritmalar adımlar üzerinde yalnızca kısmi bir düzen uygular, bu yüzden burada çok basitleştiriyorum. Kısmen sıralı bir dizi olarak tanımlamak bir sekanstan daha doğru olurdu, ancak kelimeleri biraz daha basit tutmak istedim. Ayrıca, kısmen sipariş edilen bir seti tam sırayla gömmek kolayca mümkündür.

Sonuç: Bir bitiş durumu veya değeri. Önceden tahmin edilebilir olmak zorunda değildir, ancak bazı koşulları tatmin eden kesin bir son olması gerekir. Bu, bir işletim sisteminin bir algoritma olmadığı anlamına gelir, ancak birçoğunu kullanır.

Sonlu: Bir algoritmanın, en azından yeterince uzun süre çalışabilen bir makinede bir süre durması garanti edilir. Tahmin edilebilir bir zamanda durması garanti edilmez ve mevcut herhangi bir makinede güneş genişlemeden ve kırmızıya dönmeden önce duracağı garanti edilmez. Bu aynı zamanda bir işletim sisteminin bir algoritma olmadığı anlamına gelir, çünkü ideal olarak sonsuza dek çalışır. Bir zamanlar duracağından eminsek algoritma olacak bir şeyi tanımlamak için kullanılan "prosedür" kelimesini gördüm. (Bilinmeyen bir süre içinde duracak bir algoritmaya sahip olmak mümkündür. Diyelim ki, Goldbach'ın varsayımının yapıcı olmayan bir kanıtta matematiksel olarak yanlış olduğu kanıtlandı, bu yüzden iki asalin toplamı olmayan çift sayı> 2 idi. Basitçe çift sayıları test eden bir algoritma sonunda sona erer,

Algoritma kasıtlı olarak soyut bir şeydir, bu yüzden "Evrenin ısı ölümünden önce bunu gerçekleştirmek fiziksel olarak mümkün mü?" Cevaplamak çok zor olurdu. Bilgisayar işlemleri ile ilgili ise, bunu bir programlama dilinde uygulamak kolaydır.


-1

Genel bir tanım vermek zorunda kalsaydım, bir algoritmanın, açık / kaba kuvvet çözümünden daha karmaşık ve daha verimli olan bir bilgi işlem problemini çözmek için bir formül olduğunu söyleyebilirim.

Ayrıca, bir algoritmanın belirli bir kaynak kodu olmadığını belirtmek önemlidir; hesaplamanın kendisidir. Diğer şeylerin yanı sıra bu, herhangi bir Turing-complete dilinin, diğer Turing-complete dilinin uygulayabileceği herhangi bir algoritmayı uygulayabileceği anlamına gelir.


Bu cevabı çok beğendim ve biraz daha ileri gidebilir ve (orijinal soru ile ilgili olmasa da) diyebiliriz: herhangi bir algoritma kaba kuvvet / ağaç arama çözümünün bir optimizasyonudur. Resmi olarak kanıtlanıp kanıtlanamayacağını merak ediyordum.
mojuba

-1 "Algoritma" iyi tanımlanmış bir matematik terimidir.
Apalala

1
@Apalala, netlik veya diyelim ki özünü daha iyi anlamak için onu yeniden tanımlamanızı engelleyen şey nedir? "Bir talimatlar dizisi" olarak algoritma bana neredeyse hiçbir şey söylemiyor.
mojuba

1
@mojuba Terimin yeniden tanımlanıp tanımlanmayacağı umurumda değil, ancak geleneksel tanımın yararlı olduğunu düşünüyorum, çünkü en azından sorunlara yaklaşma yolları arasında ayrım yapıyordu: Bir algoritma, sınırlı kaynakları kullanarak bir problemi çözmek için bir reçetedir . Bu tanımı ve öngörülebilir sonucu değiştirmek, aynı anlama gelen başka bir kelime bulmamız gerektiğidir. Kahretsin! Geçen yüzyılda hesaplanabilirlik ve karmaşıklık hakkında edinilen tüm bilgiler, sağlam bir algoritma tanımı olmadan ortadan kalkar !
Apalala

1
Kaba kuvvet arayışı bir algoritmadır. Genellikle hoş bir algoritma değildir ve genellikle yazmaya değmez. Kaba kuvvetin dışlanmasında gerçek bir fayda görmüyorum ve çoğu durumda "kaba kuvvetten daha iyi" nin ne anlama geldiği açık değildir.
David Thornley
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.