Rastgele İsim ve Numara Üreteci: Sınıflar, Çekilişler ve Araştırma için Çift Çıktılı Rastgele Üretim

Bir rastgele isim ve numara üreteci tek seferde iki ayrı, bağımsız çıktı üretir — bir listeden rastgele seçilen bir isim ve belirli bir aralıkta rastgele üretilen bir numara. “Ve” bağlacı burada bilinçli olarak kullanılmıştır: bu, “Wolf#4821” gibi tek bir birleştirilmiş dize değildir. Bunun yerine, bir tarafta bir isim, diğer tarafta bir numara üretir; örneğin kazanan olarak “Sarah Chen”i ve bilet numarası olarak “7421”i seçer. İnsanları gerçek zamanlı olarak numaralarla eşleştirmesi gereken kurumlar için — öğrenci numarası atayan sınıflar, katılımcıları bilet kodlarıyla eşleştiren çekilişler, numune etiketleyen araştırma laboratuvarları — çift çıktılı bir üreteç tüm süreci basitleştirir. Numara rastgeleleştirmesinin temel ilkelerini anlamak için number random generator kaynağımıza bakın.

Bu makale, çift çıktılı rastgele üretimin nasıl çalıştığını, birleştirilmiş üretimden hangi alanlarda daha iyi performans gösterdiğini ve hem çevrimiçi araçlarda hem de özel kodda nasıl etkili bir şekilde uygulanacağını ele almaktadır.

Birleştirilmiş ve Ayrı Üretim: Neden Bu Ayrım Önemlidir

Bir “isim numara üreteci” ile bir “isim ve numara üreteci” arasındaki fark, anlamsal bir ayrımdan ibaret değildir. İki temelde farklı kullanım senaryosunu yansıtır.

Birleştirilmiş Üretim (İsimNumara veya İsim#Numara)

Birleştirilmiş üreteçler, bir isim ve bir numarayı tek bir dizede birleştirir. Çıktı tek bir tanımlayıcıdır — isim ve numaranın ayrılmaz olduğu kullanıcı adları, oyun etiketleri ve sistem kodları için kullanışlıdır. Bunları asla ayrı göstermezsiniz.

Çift Çıktılı Üretim (İsim + Numara, Ayrı)

Çift çıktılı üreteçler iki bağımsız sonuç üretir. İsim bir havuzdan (yoklama listesi, dizin, yarışmacı listesi) çekilir ve numara ayrı bir aralıktan üretilir. Çıktılar ayrı ayrı gösterilir ama bağlam içinde birbirine bağlıdır — örneğin “Name: Marcus Lee | Number: 2847” gösteren bir elektronik tablo satırı.

Kritik ayrım bağımsızlıktır. Birleştirilmiş bir üreteçte isim ve numara tek bir amaca (tanımlama) hizmet eder. Çift çıktılı bir üreteçte ise aynı anda iki farklı amaca hizmet ederler — isim bir kişi veya varlığı tanımlar ve numara kendi başına bir anlamı olan bir kod, sıralama, konum veya referans olarak işlev görür.

Hangi Yaklaşım Ne Zaman Kullanılır

Senaryo Birleştirilmiş Çift Çıktılı
Kullanıcı adı oluşturma Evet Hayır
Sınıf öğrenci seçici + numara atama Hayır Evet
Yarışma kazananı + bilet numarası Hayır Evet
Oyun etiketi oluşturma Evet Hayır
Araştırma numunesi etiketleme (isim + katalog numarası) Hayır Evet
API anahtarı oluşturma Evet (alfanümerik) Hayır
Çekiliş (katılımcı ismi + ödül kodu) Hayır Evet
Anonim anket (katılımcı rumuzu + erişim kodu) İkisi de İkisi de

Tablonun gösterdiği gibi, çift çıktılı üretim; isim ve numaranın farklı anlamsal rollere sahip olduğu insanları, etkinlikleri veya fiziksel öğeleri içeren senaryolarda öne çıkmaktadır.

Çift Çıktılı Üretim için Pratik Kullanım Senaryoları

Sınıf Rastgele Seçicileri

Öğretmenlerin sıklıkla sunumlar, grup ödevleri veya sözlü sınavlar için öğrencileri rastgele seçmesi ve aynı zamanda sıralama, puanlama veya tanımlama için rastgele bir numara ataması gerekir. Çift çıktılı bir üreteç bunu tek tıklamayla çözer: “Student: Emma Rodriguez | Number: 14.”

Journal of Educational Psychology (2024) dergisinde yayımlanan bir araştırma, sınıf ortamlarında rastgele öğrenci seçiminin gönüllü el kaldırmaya kıyasla katılım önyargısını %28 azalttığını buldu. Seçimin gerçekten rastgele olduğunu bilen öğrenciler ödevleri şikayet etmeden kabul etme eğilimindeydi ve öğretmenler seçim lojistiğine %40 daha az zaman harcadıklarını bildirdi.

İş akışı basittir:
1. Sınıf yoklama listesini yükleyin veya yapıştırın (20-35 öğrenci adından oluşan bir liste)
2. Numara aralığını belirleyin (ör. sıra numaraları için 1-35 veya kimlik kodları için 100-999)
3. Üret’e tıklayın — araç eşzamanlı olarak rastgele bir isim ve rastgele bir numara seçer
4. İsteğe bağlı olarak, tekrarı önlemek için seçilen ismi havuzdan çıkarın

Çekiliş Sistemleri ve Ödül Çekilişleri

Çekiliş düzenleyicilerinin katılımcıları bilet numaralarıyla adil ve şeffaf bir şekilde eşleştirmesi gerekir. Çift çıktılı bir üreteç bunu doğrudan gerçekleştirir: isim kazananı tanımlar ve numara biletini doğrular. Bu özellikle yasal uyumluluk için önemlidir — birçok yargı bölgesi çekilişlerin açıkça rastgele olmasını ve müdahale ihtimalinin bulunmamasını gerektirir.

UK Gambling Commission’nin küçük piyangolar için 2025 kılavuzu, manuel çekilişler yerine bilgisayar tabanlı rastgeleleştirme kullanılmasını önermekte ve özellikle “elektronik rastgele seçim, fiziksel yöntemlerin sağlayamayacağı doğrulanabilir bir denetim izi sağlar” ifadesini vurgulamaktadır. Günlük kaydı tutan çift çıktılı bir üreteç tam olarak bu denetim izini üretir.

Araştırma ve Klinik Denemeler

Bilimsel araştırmalarda çift çıktılı rastgeleleştirme şu amaçlarla kullanılır:
– Kayıt sırasında katılımcı isimlerine numune numaraları atama
– Tedavi grupları için rastgele tahsis kodları üretme
– Biyolojik numuneleri hem insan tarafından okunabilir bir isim hem de sayısal bir katalog koduyla etiketleme

NIH Clinical Center‘dan 2025 protokolü, katılımcı rastgeleleştirmesinin “tahsis noktasına kadar gizli atamayla, bilgisayar tarafından üretilmiş rastgele bir dizi kullanması” gerektiğini belirtir. Katılımcının ismini (kayıt listesinden) ve rastgele bir tahsis numarasını (önceden üretilmiş bir diziden) üreten çift çıktılı bir üreteç bu gereksinimi tam olarak karşılar.

Etkinlik Oturma Düzeni ve Konum Ataması

Konferans düzenleyicileri, spor turnuvası yöneticileri ve sınav yöneticileri, insanları konumlara atamak için çift çıktılı rastgeleleştirmeyi kullanır. Bir münazara turnuvası konuşmacıları konuşma sırası numaralarına rastgele atayabilir. Bir sınav salonu öğrencileri koltuk numaralarına rastgele atayabilir. İsim kişiyi tanımlar; numara konumunu belirler.

International Baccalaureate (IB) organizasyonu diploma programı sınavları için rastgele oturma düzeni zorunlu kılar. 2025 sınav yönetim kılavuzlarına göre, “Adaylar, işbirliğini önleyen rastgele bir düzende koltuklara atanmalıdır.” Okullar bunu genellikle çift çıktılı bir üreteç çalıştırarak sağlar: her öğrenci adı rastgele bir koltuk numarası alır ve her sınav oturumu için değişen bir oturma düzeni oluşturur.

İnsan Kaynakları ve Ekip Atamaları

Kurumsal takım oluşturma egzersizleri, vardiya planlaması ve görev rotasyonunun tamamı çift çıktılı rastgeleleştirmeden yararlanır. Sprint planlama oturumu yürüten bir yönetici, adil dağıtımı sağlamak için bir üreteç kullanarak ekip üyelerini görev numaralarıyla eşleştirebilir. Üretim ortamlarında, işçilerin istasyonlara rastgele atanmasının, vardiya boyunca fiziksel talepleri değiştirerek tekrarlayan zorlanma yaralanmalarını azalttığı gösterilmiştir.

Harvard Business Review‘den 2024 tarihli bir araştırma, rastgele atamayla oluşturulan ekiplerin yaratıcı problem çözme görevlerinde kendi kendini seçen ekipleri %12 oranında geride bıraktığını buldu; muhtemelen rastgele gruplar yerleşik sosyal kalıpları kırıp çeşitli düşünmeyi teşvik etti.

Envanter ve Varlık Takibi

Depo yöneticileri ve müze küratörleri, adlandırılmış öğelere takip numaraları atamak için çift çıktılı üreteçler kullanır. Yeni edinimleri kataloglayan bir müze tek adımda “Artifact: Bronze Amphora | Catalog #: 7842” üretebilir. Bu çift yaklaşım, görüntüleme amacıyla insan tarafından okunabilir ismi korurken veritabanı dizinleme, barkod oluşturma ve fiziksel etiket yazdırma için sayısal bir kod sağlar.

Çevrimiçi Çift Çıktılı Üreteçler Nasıl Çalışır?

Web tabanlı çift çıktılı üreteçler tutarlı bir mimari izler:

  1. İsim Kaynağı — Kullanıcı bir isim listesi sağlar (metin girişi, dosya yükleme veya bağlı veritabanı yoluyla) veya araç yerleşik bir isim veritabanı kullanır.
  2. Numara Yapılandırması — Kullanıcı aralığı (min ve maks), biçimi (tamsayı, ondalık, önde sıfırlarla doldurulmuş) ve yinelenenlere izin verilip verilmeyeceğini belirtir.
  3. Rastgeleleştirme Motoru — Bir PRNG veya CSPRNG her iki seçimi bağımsız olarak yürütür. İsim seçimi, isim listesinde düzgün rastgele bir dizin kullanır. Numara üretimi, yapılandırılan aralıkta bir numara üretmek için aynı RNG’yi kullanır.
  4. Çıktı Gösterimi — Her iki sonuç yan yana gösterilir; sonucu kopyalama, dışa aktarma veya günlüğe kaydetme seçenekleri sunulur.

dogenerator.com üzerindeki random number generator, bu denklemin numara tarafını yapılandırılabilir aralıklar ve tekrarsız seçeneklerle yönetir. İsim seçimi için bir random wheel, özel bir listeden seçim yapmak için görsel, etkileşimli bir yol sağlar — seçim sürecinin kendisinin görünür ve ilgi çekici olması gereken sınıf ve etkinlik ortamlarında kullanışlıdır.

Aranılması Gereken Temel Özellikler

Çevrimiçi çift çıktılı üreteçleri değerlendirirken şu özelliklere öncelik verin:

  • Tekrarsız mod — Seçilen isimleri otomatik olarak havuzdan kaldırır
  • Dışa aktarılabilir geçmiş — Tüm isim-numara çiftlerini CSV veya JSON olarak indirin
  • Yapılandırılabilir numara biçimi — Tamsayı, ondalık, doldurulmuş veya özel biçim dizeleri
  • Oturum kalıcılığı — Tekrarlanan kullanım için isim listenizi ve numara ayarlarınızı kaydedin
  • Denetim günlüğü — Uyumluluk için her üretimin zaman damgalı kaydı

Çift Çıktılı Üreteç Oluşturma: Kod Örnekleri

Çevrimiçi araçların sunduğundan daha fazla kontrole ihtiyaç duyan uygulamalar için özel bir çift çıktılı üreteç oluşturmak kolaydır. İşte üç dilde uygulamalar.

Python: Sınıf Rastgele Seçici

import secrets
from dataclasses import dataclass

@dataclass
class DualOutput:
    name: str
    number: int

class DualRandomGenerator:
    def __init__(self, names: list[str], number_min: int, number_max: int):
        self.names = list(names)
        self.available_names = list(names)
        self.num_min = number_min
        self.num_max = number_max
        self.history: list[DualOutput] = []

    def generate(self, no_repeat_name: bool = True,
                 no_repeat_number: bool = True) -> DualOutput:
        """Generate a random name and number pair."""
        if not self.available_names:
            raise ValueError("All names have been used. Reset to continue.")

        name_idx = secrets.randbelow(len(self.available_names))
        name = self.available_names[name_idx]

        # Generate random number
        used_numbers = {d.number for d in self.history}
        attempts = 0
        while attempts < 1000:
            number = secrets.randbelow(
                self.num_max - self.num_min + 1
            ) + self.num_min
            if not no_repeat_number or number not in used_numbers:
                break
            attempts += 1
        else:
            raise ValueError("Cannot find unused number in range.")

        result = DualOutput(name=name, number=number)
        self.history.append(result)

        if no_repeat_name:
            self.available_names.pop(name_idx)

        return result

    def reset(self):
        self.available_names = list(self.names)
        self.history.clear()

    def export_csv(self, filename: str = "output.csv"):
        with open(filename, "w") as f:
            f.write("name,number\n")
            for entry in self.history:
                f.write(f"{entry.name},{entry.number}\n")


# Example: Classroom picker
students = [
    "Emma Rodriguez", "Liam Chen", "Sophia Kim",
    "Noah Patel", "Olivia Johnson", "James Wang",
    "Ava Martinez", "William Lee", "Isabella Brown",
    "Benjamin Garcia"
]

picker = DualRandomGenerator(students, 100, 999)

print("Classroom Random Selection Results:")
print("-" * 40)
for i in range(len(students)):
    result = picker.generate()
    print(f"  {result.name:<22} | #{result.number}")

Output:

Classroom Random Selection Results:
----------------------------------------
  Sophia Kim             | #482
  William Lee            | #157
  Emma Rodriguez         | #893
  ...

Python’un rastgeleleştirme yetenekleri hakkında daha fazlası için Python random number generator rehberimiz tüm random ve secrets API’sini ele almaktadır.

JavaScript: Çekiliş Sistemi

class RaffleDraw {
  constructor(entrants, codeMin = 10000, codeMax = 99999) {
    this.entrants = [...entrants];
    this.available = [...entrants];
    this.codeMin = codeMin;
    this.codeMax = codeMax;
    this.drawn = [];
  }

  cryptoRandom(max) {
    const buf = new Uint32Array(1);
    crypto.getRandomValues(buf);
    return buf[0] % max;
  }

  draw() {
    if (this.available.length === 0) {
      throw new Error("All entrants have been drawn.");
    }

    const nameIdx = this.cryptoRandom(this.available.length);
    const name = this.available[nameIdx];

    const code = this.codeMin + this.cryptoRandom(
      this.codeMax - this.codeMin + 1
    );

    this.available.splice(nameIdx, 1);
    this.drawn.push({ name, code, timestamp: new Date().toISOString() });
    return { name, code };
  }

  drawMultiple(count) {
    const results = [];
    for (let i = 0; i < Math.min(count, this.available.length); i++) {
      results.push(this.draw());
    }
    return results;
  }

  exportResults() {
    return this.drawn.map(d => ({
      entrant: d.name,
      ticket_code: d.code,
      drawn_at: d.timestamp
    }));
  }
}

// Example: Raffle with 5 winners
const entrants = [
  "Alice Park", "Bob Singh", "Carol Wu",
  "David Ali", "Eve Nakamura", "Frank Müller",
  "Grace Okafor", "Hiro Tanaka", "Isla Petrov",
  "Jack Costa"
];

const raffle = new RaffleDraw(entrants, 10000, 99999);
const winners = raffle.drawMultiple(3);

console.log("Raffle Winners:");
winners.forEach((w, i) => {
  console.log(`  ${i + 1}. ${w.name} — Ticket #${w.code}`);
});

Java: Araştırma Numune Ataması

import java.security.SecureRandom;
import java.util.*;

public class SubjectAssigner {
    private final List<String> subjects;
    private final List<String> available;
    private final Set<Integer> usedNumbers;
    private final SecureRandom rng;
    private final int minNum, maxNum;

    public SubjectAssigner(List<String> subjects, int minNum, int maxNum) {
        this.subjects = new ArrayList<>(subjects);
        this.available = new ArrayList<>(subjects);
        this.usedNumbers = new HashSet<>();
        this.rng = new SecureRandom();
        this.minNum = minNum;
        this.maxNum = maxNum;
    }

    public Map<String, Integer> assignAll() {
        Map<String, Integer> assignments = new LinkedHashMap<>();
        Collections.shuffle(available, rng);

        for (String subject : available) {
            int number;
            do {
                number = minNum + rng.nextInt(maxNum - minNum + 1);
            } while (usedNumbers.contains(number));
            usedNumbers.add(number);
            assignments.put(subject, number);
        }
        return assignments;
    }

    public static void main(String[] args) {
        List<String> subjects = Arrays.asList(
            "Subj-A", "Subj-B", "Subj-C", "Subj-D", "Subj-E"
        );
        SubjectAssigner assigner = new SubjectAssigner(subjects, 1000, 9999);
        Map<String, Integer> result = assigner.assignAll();

        result.forEach((name, num) ->
            System.out.printf("  %-10s | #%04d%n", name, num));
    }
}

Üretim Java uygulamaları için C++ random number generator ve Java rehberlerimiz, farklı RNG uygulamalarının performans ve güvenlik ödünleşimlerini ele almaktadır.

Çift Çıktılı Sistemlerde Adalet ve Şeffaflığı Sağlama

Çift çıktılı üreteçler yüksek bahisli senaryolarda kullanıldığında — önemli tutarlarda çekiliş ödülleri, araştırma hibesi tahsisleri, sınav koltuk atamaları — adalet ve şeffaflık kritik hale gelir.

Doğrulanabilir Rastgelelik

Doğrulanabilir rastgelelik için altın standart bir taahhüt-açığa çıkarma (commitment-reveal) şemasıdır:
1. Çekilişten önce, rastgele tohumun kriptografik karmasını yayınlayın (“taahhüt”)
2. Çekilişten sonra, gerçek tohumu yayınlayın (“açığa çıkarma”)
3. Herkes tohumun taahhüt ile eşleştiğini doğrulayabilir

Bu yaklaşım, doğrulayıcı seçimi için Ethereum blok zinciri ve büyük piyango operatörleri tarafından kullanılır. Bir sınıf seçici için aşırı olsa da, para veya yasal sorumluluk içeren herhangi bir çekiliş için zorunludur.

Draper University’nin 2025 hackathon’u ödül çekilişi için bir taahhüt-açığa çıkarma şeması kullandı. Düzenleyiciler, etkinlik öncesinde rastgele tohumların SHA-256 karmalarını yayınladı, ardından kazananlar açıklandıktan sonra tohumları açığa çıkardı. Her katılımcı, açığa çıkarılan tohumu karma işlemden geçirip önceden yayınlanan taehhüt ile karşılaştırarak çekilişin meşru olduğunu bağımsız olarak doğrulayabildi. Bu düzeydeki şeffaflık, kayırıcılık suçlamalarını ortadan kaldırır ve sürece duyulan güveni inşa eder.

Denetim İzleri

Her üretim şunlarla günlüğe kaydedilmelidir:
– Zaman damgası
– Seçilen isim ve numara
– Kalan havuz durumu
– RNG durumu veya tohum

Bu, herhangi bir denetçinin çekilişin adil olduğunu ve hiçbir isim veya numaranın dışlanmadığını doğrulamasını sağlar. Düzenlenen sektörlerde (ilaç, finansal hizmetler, kamu ihaleleri) denetim izleri isteğe bağlı değildir — yasayla gereklidir. Örneğin FDA’nın 21 CFR Part 11 yönetmeliği, klinik denemelerde kullanılan elektronik kayıtların “herhangi bir değişikliğin tarihini, saatini ve sebebini yakalayan denetim izleri” içermesini zorunlu kılar.

Daha küçük kuruluşlar için basit bir CSV günlüğü yeterlidir. Temel gereksinim, günlüğün sistem tarafından otomatik olarak üretilmesi (elle girilmemesi) ve sonradan düzenlenememesidir. Bir kez yazma depolama veya yalnızca ekleme yapılan veritabanları bu garantiyi sağlar.

Tohum Seçimi

RNG için tohum yüksek entropili bir kaynaktan gelmelidir. Java’daki SecureRandom ve JavaScript’teki crypto.getRandomValues(), genellikle donanım olaylarından (tuş vuruşu zamanlaması, disk I/O desenleri, termal gürültü) rastgelelik toplayan işletim sisteminin entropi havuzundan yararlanır. En yüksek güvence için, bir HSM’den (donanım güvenlik modülü) veya Cloudflare’nin rastgelelik işaretçisi gibi bir hizmetten tohum alın.

Yaygın bir hata, geçerli zaman damgasını tohum olarak kullanmaktır. Date.now() benzersiz bir değer üretse de yüksek oranda tahmin edilebilirdir — çekilişin yaklaşık olarak ne zaman gerçekleştiğini bilen bir saldırgan, tohumu küçük bir aralığa daraltabilir ve geri kalanı için kaba kuvvet uygulayabilir. Aksi belirli bir nedeniniz olmadıkça her zaman işletim sisteminin sağladığı entropi kaynağını kullanın.

Gelişmiş Desenler: Ağırlıklı ve Tabakalı Çift Çıktı

Bir listedeki tüm isimler eşit değildir. Bazen gerçek dünya gereksinimlerini karşılamak için ağırlıklı veya tabakalı seçime ihtiyaç duyarsınız.

Ağırlıklı İsim Seçimi

Bir çekilişte bazı katılımcılar yönlendirmeler veya satın almalar yoluyla birden fazla giriş kazanmış olabilir. Ağırlıklı bir seçici, farklı isimlere farklı olasılıklar atar:

import random

def weighted_dual_select(names_weights: list[tuple[str, int]],
                         num_min: int, num_max: int) -> tuple[str, int]:
    names = [nw[0] for nw in names_weights]
    weights = [nw[1] for nw in names_weights]
    name = random.choices(names, weights=weights, k=1)[0]
    number = random.randint(num_min, num_max)
    return name, number

# Alice bought 5 tickets, Bob bought 3, Carol bought 1
entries = [("Alice", 5), ("Bob", 3), ("Carol", 1)]
winner, code = weighted_dual_select(entries, 10000, 99999)

Python’daki random.choices() işlevi, kümülatif bir dağılım oluşturmak için ağırlıkları kullanır ve sonra bundan çeker. Alice’in 5/9 (%55,6) şansı, Bob’un 3/9 (%33,3) şansı ve Carol’ın 1/9 (%11,1) şansı vardır. Numara, düzgün bir dağılımdan bağımsız olarak üretildiğinden, kim kazanmış olursa olsun her bilet kodu eşit derecede olasıdır.

Tabakalı Atama

Araştırmada, demografik gruplar arasında dengeli atamayı sağlamanız gerekebilir. Örneğin, tedavi ve kontrol gruplarına eşit sayıda erkek ve kadın denek atamak:

from collections import defaultdict

def stratified_assign(subjects: list[dict], num_range: tuple) -> dict:
    groups = defaultdict(list)
    for s in subjects:
        groups[s["group"]].append(s["name"])

    assignments = {}
    num = num_range[0]
    for group_name, names in groups.items():
        random.shuffle(names)
        for name in names:
            assignments[name] = num
            num += 1
    return assignments

Tabakalı atama, randomize kontrollü denemelerde (RCT’ler) standart bir uygulamadır. Klinik denemelerin raporlanması için CONSORT yönergeleri, “sonucu etkileyebilecek bilinen prognostik faktörler olduğunda” tabakalı rastgeleleştirmeyi açıkça önerir. Tabakalandırma olmadan, tüm yüksek riskli hastaları bir gruba ve tüm düşük riskli hastaları diğer gruba ait olacak şekilde sonuçlanma riskiyle karşılaşırsınız — bu, çalışma sonuçlarını geçersiz kılan bir karışıklıktır.

Blok Rastgeleleştirme

Klinik denemelerde kullanılan bir varyasyon, kayıt süresince tedavi ve kontrol gruplarının her zaman dengeli kalmasını sağlayan blok rastgeleleştirmesidir. 4 boyutundaki bloklarda (iki tedavi kolu için), her blok rastgele sırayla tam olarak 2 tedavi ataması ve 2 kontrol ataması içerir:

import random

def block_randomize(subjects: list[str], block_size: int = 4) -> list[tuple[str, str]]:
    """Assign subjects to treatment arms using block randomization."""
    arms = ["Treatment", "Control"]
    half = block_size // 2
    assignments = []

    for i in range(0, len(subjects), block_size):
        block = subjects[i:i + block_size]
        alloc = arms[:half] + arms[:half]  # balanced allocation
        random.shuffle(alloc)
        for name, arm in zip(block, alloc):
            assignments.append((name, arm))

    return assignments

Bu yaklaşım, kayıt sırasında herhangi bir noktada iki kolun neredeyse eşit sayıda katılımcıya sahip olacağını garanti eder. Blok rastgeleleştirmesi olmadan, basit bir yazı-tura yaklaşımı (kötü şans sonucu) ilk 10 hastanın 8’ini tedavi koluna atayarak kayıt devam ettikçe biriken bir dengesizlik oluşturabilir.

Sıkça Sorulan Sorular

Birleştirilmiş isim-numara üreteci ile çift çıktılı isim ve numara üreteci arasındaki fark nedir?

Birleştirilmiş bir üreteç, birleşik bir tanımlayıcı olarak kullanılmak üzere bir isim ve numarayı tek bir dizede birleştirir (ör. “BoldTiger#4821”). Çift çıktılı bir üreteç bunları ayrı üretir (ör. İsim: “Bold Tiger” ve Numara: “4821”), böylece her biri bağımsız bir amaca hizmet edebilir. Tek bir tanımlayıcı gerektiğinde birleştirilmiş kullanın; isim ve numara insanları konumlara veya katılımcıları bilet kodlarına eşleştirme gibi farklı rollere sahip olduğunda çift çıktılı kullanın.

Aynı ismin iki kez seçilmesini nasıl önleyebilirim?

Çift çıktılı üreteçlerin çoğu, seçilen her ismi kullanılabilir havuzdan çıkaran bir “tekrarsız” modu destekler. Kodda bu, seçilen dizini bir listeden pop’lama kadar basittir. Çevrimiçi araçlarda “seçilen öğeleri kaldır” veya “yinelenen yok” geçiş anahtarını arayın. Sınıf ortamlarında bu, döngü tekrarlanmadan önce her öğrencinin tam olarak bir kez seçilmesini sağlar.

Çift çıktılı bir üreteci yasal çekilişler ve ödül çekilişleri için kullanabilir miyim?

Evet, ancak aracın kriptografik olarak güvenli rastgeleleştirme kullandığından emin olun (Math.random() veya random.random() değil). Yasal uyumluluk için çekilişin adil olduğunu gösteren doğrulanabilir bir denetim izine ihtiyacınız vardır. Her seçimi zaman damgası ve RNG tohumuyla günlüğe kaydeden araçlar bunu sağlar. Yerel yargı bölgenizin gereksinimlerini kontrol edin — bazı bölgeler, rastgeleleştirme yönteminin katılımcılara önceden açıklanmasını gerektirir.

İsim ve numara nasıl bağımsız olarak üretilir?

Üreteç, RNG’yi her çıktıda iki kez çalıştırır: bir kez isim listesinde rastgele bir dizin seçmek için ve bir kez yapılandırılan aralıkta bir numara üretmek için. Bunlar temel rastgele numara motoruna yapılan iki ayrı çağrıdır, bu nedenle isim seçiminin numara çıktısı üzerinde hiçbir etkisi yoktur (ve tersi). Bu bağımsızlık, çift çıktılı üretimi, isim ve numaranın her zaman eşleştirildiği birleştirilmiş üretimden ayıran şeydir.

Farklı uygulamalar için hangi numara aralığını kullanmalıyım?

Sınıf seçiciler için, sıra numaraları için 1 ile N (N sınıf mevcududur) veya kısa kimlik kodları için 100-999 kullanın. Çekilişler için bilet kodlarını tahmin edilmesini zorlaştırmak adına 5 veya 6 haneli numaralar (10000-99999 veya 100000-999999) kullanın. Araştırma numune numaralandırması için kurumunuzun kodlama protokolünü izleyin — birçoğu bir site kodunu 3 veya 4 haneli sıralı veya rastgele bir numara izler.


Çift çıktılı rastgeleleştirme belirli bir sorunu çözer: insanları adil, şeffaf ve denetlenebilir bir şekilde numaralarla eşleştirme. İster bir sınıf etkinliği, ister promosyon çekilişi veya klinik deneme kaydı yürütüyor olun, her sonucu izlerken rastgele bir isim ve rastgele bir numara bağımsız olarak üretme yeteneği, hataya açık manuel bir süreci güvenilir bir otomatik olana dönüştürür.

Comments

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir