ROMAN-NUMERALS.COM
Makalelere Dön
•Yazar Roman Numerals Team

Roma Rakamı Algoritmaları: Python, JavaScript ve Java Uygulamaları

Python, JavaScript ve Java'da Roma rakamı dönüştürme algoritmalarının nasıl uygulanacağını öğrenin. Optimize edilmiş kod, karmaşıklık analizi ve açgözlü algoritma açıklamalarını içerir.

Roma rakamları ile tam sayılar arasında dönüşüm yapmak, kodlama mülakatlarında, rekabetçi programlamada ve gerçek dünya uygulamalarında karşımıza çıkan klasik bir programlama problemidir. Bu kılavuz, temel algoritmaların açıklamalarıyla birlikte Python, JavaScript ve Java dillerinde optimize edilmiş uygulamalar sunar.

Problemi Anlamak

İki ilgili problemi çözmemiz gerekiyor:

  1. Tam Sayıdan Roma Rakamına: Bir Arap sayısını (örneğin 1994) Roma rakamlarına (MCMXCIV) dönüştürmek.
  2. Roma Rakamından Tam Sayıya: Roma rakamlarını (örneğin MCMXCIV) bir Arap sayısına (1994) dönüştürmek.

Kısıtlamalar

  • Giriş aralığı: 1 ile 3999 arası (standart Roma rakamı aralığı).
  • Standart çıkarma notasyonu kullanın (IV, IX, XL, XC, CD, CM).
  • Tüm geçerli Roma rakamı kombinasyonlarını destekleyin.

Açgözlü Algoritma (Greedy Algorithm) Yaklaşımı

Her iki dönüşüm de bir açgözlü algoritma stratejisi kullanır:

Tam Sayıdan Roma Rakamına (Açgözlü)

  1. Değerlerin Roma rakamlarına eşlendiği azalan sırada bir liste oluşturun.
  2. Her değer-rakam çifti için:
    • Bu rakamdan mümkün olduğunca çok kullanın.
    • Kullanılan değeri kalan sayıdan çıkarın.
  3. Sayı sıfıra ulaşana kadar tekrarlayın.

Roma Rakamından Tam Sayıya (Açgözlü)

  1. Roma rakamı dizesini soldan sağa doğru tarayın.
  2. Her sembol için:
    • Eğer kendisinden sonraki sembolden küçükse, onu çıkarın (çıkarma notasyonu).
    • Aksi takdirde, onu ekleyin.
  3. Toplam sonucu döndürün.

Python Uygulaması

Tam Sayıdan Roma Rakamına

def int_to_roman(num: int) -> str:
    """
    Bir tam sayıyı Roma rakamlarına dönüştürür.

    Zaman Karmaşıklığı: O(1) - sabit iterasyon sayısı (13)
    Alan Karmaşıklığı: O(1) - sabit boyutlu eşleme
    """
    # Azalan sırada eşleme (çıkarma kombinasyonları dahil)
    values = [
        (1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'),
        (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'),
        (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')
    ]

    result = []

    for value, numeral in values:
        count = num // value
        if count:
            result.append(numeral * count)
            num -= value * count

    return ''.join(result)

Roma Rakamından Tam Sayıya

def roman_to_int(s: str) -> int:
    """
    Roma rakamlarını bir tam sayıya dönüştürür.

    Zaman Karmaşıklığı: O(n) - n dize uzunluğudur
    Alan Karmaşıklığı: O(1)
    """
    roman_map = {
        'I': 1, 'V': 5, 'X': 10, 'L': 50,
        'C': 100, 'D': 500, 'M': 1000
    }

    result = 0
    prev_value = 0

    # Sağdan sola doğru tara
    for char in reversed(s):
        value = roman_map[char]

        if value < prev_value:
            result -= value
        else:
            result += value

        prev_value = value

    return result

JavaScript Uygulaması

Tam Sayıdan Roma Rakamına

function intToRoman(num) {
    const values = [
        [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'],
        [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'],
        [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']
    ];

    let result = '';

    for (const [value, numeral] of values) {
        while (num >= value) {
            result += numeral;
            num -= value;
        }
    }

    return result;
}

Algoritma Analizi

Zaman Karmaşıklığı

Tam Sayıdan Roma Rakamına:

  • O(1) - Sabit zaman. Giriş boyutundan bağımsız olarak her zaman tam olarak 13 çift üzerinden geçer.

Roma Rakamından Tam Sayıya:

  • O(n) - Doğrusal zaman. Dizideki her karakterin bir kez incelenmesi gerekir.

Neden Açgözlü Algoritma Çalışır?

Açgözlü algoritma Roma rakamları için çalışır çünkü:

  1. Optimal Altyapı: Optimal çözüm, alt problemlerin optimal çözümlerini içerir.
  2. Örtüşmeyen Alt Problemler: Her değer bağımsız olarak kullanılır.
  3. Her zaman mümkün olan en büyük değeri kullanmak, en kısa Roma rakamı temsilini garanti eder.

Sonuç

Roma rakamı dönüştürme algoritmaları, optimal altyapıya sahip problemler için açgözlü yaklaşımın gücünü gösterir. İster mülakatlara hazırlanın ister bir belge oluşturucu yazın, bu uygulamalar sağlam bir temel sağlar.

Kod yazmadan kullanıcı dostu bir arayüz için, anında sonuç veren çevrimiçi Roma rakamı dönüştürücümüzü deneyebilirsiniz.


Daha fazlasını mı öğrenmek istiyorsunuz? Roma rakamları okuma kılavuzumuza göz atın veya Excel'de Roma rakamı kullanımını inceleyin.