SORU
26 EYLÜL 2008, Cuma


1-7 1-5 rasgele bir aralığı genişletmek

Aralığında rastgele bir tam sayı 5, 1 üreten bir fonksiyonu verilen aralıkta rastgele bir tamsayı 7 1 üreten bir fonksiyon yazın.

  1. Basit bir çözüm nedir?
  2. Bellek kullanımını azaltmak veya daha yavaş bir İŞLEMCİ üzerinde çalıştırmak için etkili bir çözüm nedir?

CEVAP
8 Mayıs 2009, Cuma


Bu Adam Rosenfield çözüm eşittir, ama bazı okuyucular için biraz daha net olabilir. Rand5 varsayar() aralığında istatistiksel olarak rasgele bir tamsayı döndüren bir işlev 5 dahil) üzerinden 1'dir.

int rand7()
{
    int vals[5][5] = {
        { 1, 2, 3, 4, 5 },
        { 6, 7, 1, 2, 3 },
        { 4, 5, 6, 7, 1 },
        { 2, 3, 4, 5, 6 },
        { 7, 0, 0, 0, 0 }
    };

    int result = 0;
    while (result == 0)
    {
        int i = rand5();
        int j = rand5();
        result = vals[i-1][j-1];
    }
    return result;
}

Nasıl çalışır? Şöyle düşünün: bir kağıt üzerinde çift boyut bu dizi Basım, dart tahtası için teyel ve rastgele ok atıyorlar, düşünün. Eğer sıfır olmayan bir değer vurursanız, ve sıfır olmayan seçim değerleri eşit sayıda olduğundan 7, 1 arasında istatistiksel olarak rastgele bir değer. Eğer sıfır vurursanız, sadece sıfır olmayan bir vurmak kadar dart atmaya devam. Bu kod bunu yapıyor: i ve j dizinleri rastgele dart tahtası üzerinde bir konum seçin, ve eğer iyi bir sonuç alamadım eğer, dart atmaya devam ediyoruz.

Adam'ın dediği gibi, bu sonsuza kadar da en kötü durumda, ama istatistiksel olarak en kötü durum hiç olmaz. :)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • Jorrit Jongma

    Jorrit Jongm

    17 Ocak 2008
  • USI Events

    USI Events

    6 AĞUSTOS 2013