Python'da Faktoriyellerin Hatırlanması

Resim: Pixabay

Şu anda Taylor Polinomlarını kullanarak sinüsleri ve kosinüsleri hesaplamakla ilgili bir makale üzerinde çalışıyorum. Bunlar faktöriyelleri yoğun bir şekilde kullanıyor, bu yüzden süreci düzene sokmanın yollarını düşünmeye başladım.

Bu makale, faktöriyelleri önceden hesaplamak ve ileride kullanmak üzere saklamak için bir arama tablosu ile notu kullanan basit bir projeyi açıklamaktadır.

Çoğu algoritma ve diğer süreçler, hesaplanması gereken değerlerin, genellikle bellek ve / veya zaman açısından pahalı bir şekilde, yoğun ve tekrar tekrar kullanılmasını sağlar. Bu nedenle, sıklıkla ihtiyaç duyulan veya olması muhtemel değerlerin yalnızca bir kez hesaplandığı bir tür mekanizma geliştirmek mantıklıdır.

Yukarıda bahsedilen trigonometrik fonksiyonların hesaplanmasında faktörlerin kullanımı bir örnektir. Gelecekteki bir makalede, ilkeyi, sinüsleri ve kosinüsleri hesaplama ve depolamaya genişleteceğim, ancak elbette başka birçok yaygın örnek var.

Faktöriyelleri ele alırken, bir arama tablosu kullanarak notlandırmanın geniş çerçevesi basit ve açıktır: sadece en yüksek indeksi faktöriyel olmasını istediğimiz en yüksek sayı olan tamsayıların bir listesini kullanın. Belirli bir sayının faktöriyeli bu nedenle dizinin dizini olarak sayı kullanılarak ayarlanır ve alınır.

Neyi Kodlamaya Gireceğiz?

Bu proje, belirli bir maksimum değere kadar faktöriyel hafızayı uygulayan küçük bir sınıftan oluşur. Faktörler __init__bir listede hesaplanır ve saklanır. Ayrıca bireysel bir faktör elde etmenin bir yöntemi de var.

Proje aşağıdaki dosyalardan oluşmaktadır:

  • factorialsmemoization.py
  • main.py

Önce factorialsmemoization.py'ye bakalım .

__init__Yöntem, bir argüman olarak bir hesaplamak faktöriyellerin maksimum sayısını alır. Daha sonra boş bir liste oluşturuyoruz, maksimum değeri depoluyoruz ve 1 olarak self.memoized_toadlandırılan bir değişkeni başlatıyoruz prev; amacı bir anda netleşecek.

Daha sonra, geri kalanını hesaplamak için bir döngü girmeden önce 1 olan 0 faktöriyelini listeye ekleriz. Zaten 0'ı ayarladığımız için bu döngünün 1'de başladığına dikkat edin. Döngü içinde bir sonraki faktöriyelı önceki sayı ile çarparak, prevbaşlamak için 1'e ayarladık . Daha sonra prevmevcut faktöriyellere geçiyoruz.

Son olarak get, istenen faktöriyelin aralık dışı olup olmadığını kontrol eden, eğer öyleyse bir istisna yaratan bir yöntemimiz var . Geçerliyse n, listeden ilgili değeri döndürür.

Bu factorialmemoization.py bitti, böylece main.py'ye geçebiliriz .

Yukarıda yaratılan modülü içe aktardıktan sonra, mainönce 8'e ayarlanmış FactorialMemoizationsınıfın bir örneğini oluşturan işleve giriyoruz n. Daha sonra 0'dan 10'a faktöriyelleri yazdırmak için bir döngüye giriyoruz - istisna işlemeyi göstermek için aralığı kasıtlı olarak aştım.

Programı Terminal'de aşağıdakilerle çalıştırın…

python3.8 main.py

… Size aşağıdaki çıktıyı verecektir.

Gördüğünüz gibi, 8'e kadar doğru faktöriyelleri elde ediyoruz, ancak daha sonra hesaplanan aralığın ötesinde 9 ile bir istisna tutuyoruz.

Suggested posts

Alan Adları Hakkında Bilgi Bulma

Brian P. Hogan'ın Küçük, Keskin Yazılım Araçları'ndan bir alıntı

Alan Adları Hakkında Bilgi Bulma

facebook.com'a bir talepte bulunduğunuzda, bilgisayarınız o bağlantıyı kurabilmesi için bu alan adını bir IP adresine çevirmek üzere alan adını arar.

Langchain kullanarak ChatGPT eklentilerini ücretsiz çalıştırma

Langchain kullanarak ChatGPT eklentilerini ücretsiz çalıştırma

Tarayıcı, Kod Tercüman vb. tüm yeni güçlü ChatGPT eklentilerini duymuş olmalısınız. Ancak bir sorun var, eklentilere erişim bir bekleme listesiyle sınırlıdır ve bu nedenle birçoğunun buna erişimi yoktur.

Related posts

Ağ TV Twitter

Ağ TV Twitter

Eski olan şimdi tekrar yeni ve eskiden ışıltılı parlak olan şey şimdi sıkıcı geliyor. 1990'ların sonundaki diğer modalarla birlikte şehir merkezindeki havalı çocuklar arasında geri dönüş yapan JNCO kot pantolonlarından bahsetmiyorum.

kovboy yalanı

Mega şirketler Amerikalılara nasıl büyük bir yalan sattı?

kovboy yalanı

Güneşin ilk ışınları düzlüklerdeki buzlu çimleri aydınlatırken, batının engebeli tepelerinde parıldayan altın rengi bir sabah. Simsiyah ve iri, sakin bir Angus sığır sürüsü, hepsinin iyi bildiği bir yere giden ıssız bir patikadan aşağı inerken güneşin doğuşuna karşı siluet oluşturuyor; kahvaltı barı.

Hristiyanlara Yönelik Zulüm: Bahsetmediğimiz Nefret Suçu

İslamofobiyi unutun: Hristiyanlar (ve Yahudiler) dini nefret suçlarının başlıca kurbanlarıdır.

Hristiyanlara Yönelik Zulüm: Bahsetmediğimiz Nefret Suçu

Her rasyonel akıl, siyaset ve medya çevrelerinde solun, hatta aşırı solun hakim olduğunu bilir, bu durum siyasi söylemde bir dengesizlik yaratır. Din alanında, bu dengesizlik açıkça görülüyor: solcu gazeteler ve ağlar, Hıristiyan inancını savunmak için acele etmiyorlar.

Bir Çocuğun İlk Kafasını Yükseltme Kitabı

Bir Çocuğun İlk Kafasını Yükseltme Kitabı

(Uyarı- Bu Hiciv, Neşeyle Yıkıcı Olma Amaçlıdır- Kesinlikle çocuklar için değildir) Annenizi ve babanızı mutfakta saklanıp o kokulu sigaraları içerken gördünüz. Sana söylerler.