Fibonacci serisinin çift sayılarının toplamını hesaplayan bir Python CLI uygulaması
Project description
Fibonacci Serisi Çift Sayılar Toplamı
Read this in English
Bu proje, Fibonacci serisinin belirli bir sayıya kadar olan çift sayılarının toplamını hesaplayan bir Python komut satırı uygulamasıdır.
Not: Bu proje, Başkent Üniversitesi BİL458 - Bulut Çözüme Giriş dersinin ödevi için Hüseyin ASLIM tarafından kodlanmıştır.
Gereksinimler
- Python 3.6 veya daha yüksek bir sürüm
- Herhangi bir ek kütüphane gerektirmez (sadece standart Python kütüphaneleri kullanılmaktadır)
Fibonacci Serisi Nedir?
Fibonacci serisi, her sayının kendisinden önceki iki sayının toplamı olduğu bir sayı dizisidir. Seri genellikle 0 ve 1 ile başlar:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
Bu projede, belirli bir N sayısına kadar olan Fibonacci serisindeki çift sayıların toplamını hesaplıyoruz.
Kurulum
GitHub'dan Kurulum
# Repoyu klonlayın
git clone https://github.com/huseyinaslim/fibonacci-even-sum.git
cd fibonacci-even-sum
# Çalıştırma izni verin (Unix/Linux/MacOS)
chmod +x fibonacci_even_sum.py
PyPI'dan Kurulum (pip ile)
# PyPI'dan kurulum
pip install fibonacci-even-sum
Bu komut, en son sürümü PyPI'dan indirir ve kurar. Kurulumdan sonra, fibonacci-even-sum komutunu doğrudan kullanabilirsiniz:
fibonacci-even-sum 100
Belirli Bir Sürümü Kurma
pip install fibonacci-even-sum==1.0.0
Geliştirme Sürümünü Kurma
pip install -e .
Bu komut, projeyi geliştirme modunda kurar, böylece kodda yaptığınız değişiklikler anında etkili olur.
Kullanım
Programı aşağıdaki gibi çalıştırabilirsiniz:
python3 fibonacci_even_sum.py N
veya Unix/Linux/MacOS sistemlerinde:
./fibonacci_even_sum.py N
Burada N, Fibonacci serisinin üst sınır değeridir.
Farklı algoritmaları kullanmak için:
# Doğrudan yöntem kullanarak hesapla
python3 fibonacci_even_sum.py N --direct
# Düzeltilmiş formül kullanarak hesapla
python3 fibonacci_even_sum.py N --formula
Algoritmaların performans karşılaştırmasını görmek için:
python3 fibonacci_even_sum.py N --compare
Örnek
python3 fibonacci_even_sum.py 100
Bu komut, 100'e kadar olan Fibonacci serisindeki çift sayıların toplamını hesaplayacaktır.
Testler
Bu proje, tüm algoritmaların doğru çalıştığını doğrulamak için unit testler içermektedir. Testleri çalıştırmak için:
python3 -m unittest test_fibonacci_even_sum.py
veya doğrudan test dosyasını çalıştırarak:
python3 test_fibonacci_even_sum.py
Test Senaryoları
Testler şu senaryoları içermektedir:
- Küçük Değerler Testi: 0, 1, 2, 8, 10, 34 ve 100 gibi küçük değerler için tüm algoritmaların doğru sonuç verdiğini kontrol eder.
- Orta Büyüklükte Değer Testi: 4.000.000 değeri için tüm algoritmaların doğru sonuç verdiğini kontrol eder.
- Büyük Değer Testi: 10^18 (1.000.000.000.000.000.000) gibi büyük bir değer için tüm algoritmaların aynı sonucu verdiğini kontrol eder.
- Negatif Değer Testi: Negatif değerler için tüm algoritmaların 0 döndürdüğünü kontrol eder.
Algoritma Optimizasyonu
Bu projede, Fibonacci serisinin çift sayılarının toplamını hesaplamak için dört farklı algoritma kullanılmıştır:
- Orijinal Algoritma: Tüm Fibonacci sayılarını hesaplar ve çift olanları toplar.
- Optimize Edilmiş Algoritma: Fibonacci serisinde her 3. sayının çift olduğu gerçeğinden yararlanarak, sadece çift Fibonacci sayılarını hesaplar.
- Doğrudan Yöntem: Standart Fibonacci hesaplamasını kullanır, ancak sadece çift sayıları toplar.
- Düzeltilmiş Formül: İteratif bir yaklaşımla çift Fibonacci sayılarını hesaplar.
Performans Karşılaştırması
Aşağıdaki performans karşılaştırması, belirtilen donanım ve yazılım konfigürasyonunda gerçekleştirilmiştir:
Sistem Bilgileri:
- İşlemci: Apple M1
- Bellek: 8 GB RAM
- İşletim Sistemi: macOS Darwin 24.3.0
- Python Sürümü: Python 3.11.0
N = 10.000.000.000.000.000.000 için performans karşılaştırması:
| Algoritma | Çalışma Süresi (saniye) | Hızlanma Oranı |
|---|---|---|
| Optimize Edilmiş Algoritma | 0.00000286 | 2.17x |
| Orijinal Algoritma | 0.00000620 | 1.00x |
| Doğrudan Yöntem | 0.00000715 | 0.87x |
| Düzeltilmiş Formül | 0.00000787 | 0.79x |
Optimize edilmiş algoritma, orijinal algoritmadan yaklaşık 2.17 kat daha hızlıdır. Doğrudan yöntem ve düzeltilmiş formül, bu test durumunda orijinal algoritmadan biraz daha yavaştır.
Tüm algoritmalar aynı sonucu vermektedir: 3.770.056.902.373.173.214
Matematiksel İlişki ve Algoritmalar
Fibonacci serisinde çift sayılar arasında çeşitli matematiksel ilişkiler vardır. Bu projede kullanılan dört farklı algoritmanın matematiksel temelleri şöyledir:
1. Orijinal Algoritma
Bu algoritma, standart Fibonacci hesaplamasını kullanır ve her adımda sayının çift olup olmadığını kontrol eder:
a, b = 1, 2
total = 0
while b <= n:
if b % 2 == 0:
total += b
a, b = b, a + b
Zaman karmaşıklığı: O(log n), çünkü Fibonacci sayıları yaklaşık olarak φ^n hızında büyür (φ altın oran, yaklaşık 1.618).
2. Optimize Edilmiş Algoritma
Fibonacci serisinde her 3. sayının çift olduğu matematiksel bir gerçektir. Ayrıca, çift Fibonacci sayıları arasında şu ilişki vardır:
F(n+6) = 4*F(n+3) + F(n)
Sadeleştirirsek:
F(n+3) = 4*F(n) + F(n-3)
Bu ilişkiyi kullanarak, sadece çift Fibonacci sayılarını hesaplayabiliriz:
a, b = 0, 2 # İlk çift Fibonacci sayısı 2'dir
total = 0
while b <= n:
total += b
a, b = b, 4*b + a # F(n+3) = 4*F(n) + F(n-3)
Zaman karmaşıklığı: O(log n / 3), çünkü sadece her 3. Fibonacci sayısını hesaplıyoruz.
3. Doğrudan Yöntem
Bu yöntem, standart Fibonacci hesaplamasını kullanır, ancak üç sayıyı takip ederek her adımda bir sonraki Fibonacci sayısını hesaplar:
a, b, c = 1, 1, 2 # F(1), F(2), F(3)
total = 0
while c <= n:
if c % 2 == 0: # Çift sayı kontrolü
total += c
a, b, c = b, c, b + c
Zaman karmaşıklığı: O(log n), orijinal algoritma ile aynıdır.
4. Düzeltilmiş Formül
Bu yöntem, Fibonacci sayılarının genel formülünü kullanmak yerine, iteratif bir yaklaşımla çift Fibonacci sayılarını hesaplar:
f1, f2, f3 = 1, 1, 2 # F(1), F(2), F(3)
total = 0
while f3 <= n:
if f3 % 2 == 0: # Çift sayı kontrolü
total += f3
f1, f2, f3 = f2, f3, f2 + f3
Zaman karmaşıklığı: O(log n), diğer iteratif yöntemlerle aynıdır.
Binet Formülü
Fibonacci sayılarını hesaplamak için kapalı bir formül olan Binet formülü şöyledir:
F(n) = (φ^n - (-φ)^(-n)) / √5
Burada φ = (1 + √5) / 2 ≈ 1.618 (altın oran) ve n, Fibonacci sayısının indeksidir.
Bu formül, büyük Fibonacci sayılarını doğrudan hesaplamak için kullanılabilir, ancak büyük n değerleri için hassasiyet sorunları yaşanabilir.
Örnekler
N = 10için çıktı: 10 (2 + 8 = 10)N = 34için çıktı: 44 (2 + 8 + 34 = 44)N = 100için çıktı: 44 (2 + 8 + 34 = 44)N = 4000000için çıktı: 4613732 (2 + 8 + 34 + 144 + 610 + 2584 + 10946 + 46368 + 196418 + 832040 + 3524578 = 4613732)
Lisans
Bu proje MIT lisansı altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakın.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fibonacci_even_sum-1.0.2.tar.gz.
File metadata
- Download URL: fibonacci_even_sum-1.0.2.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8d81f15f0590070967ddcadc87c698fb47ee9b9b642a5540dcc774f13c658ce
|
|
| MD5 |
2f812f8bbcf82b2172080c5b00dc87d6
|
|
| BLAKE2b-256 |
347cb25118758358822d72c089376ccf0494592cd628744e0c973cbd4731ecd2
|
File details
Details for the file fibonacci_even_sum-1.0.2-py3-none-any.whl.
File metadata
- Download URL: fibonacci_even_sum-1.0.2-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a3f3c1e629bdf85fe03a1313b5361ba14eacc91f3547dee5c2a773db7e33a08
|
|
| MD5 |
f36618dfb95054c9988806538c8069be
|
|
| BLAKE2b-256 |
4f9e501fabfe6514835dd4f64a1a058316f51a27f80e873496740ba27ca0130f
|