Alias Table، وزنهای ثابتِ یک توزیعِ گسسته را به جدولِ قرعهٔ دوشاخه تبدیل میکند. ابتدا یک خانه را یکنواخت انتخاب میکنیم؛ سپس یک آستانه مشخص میکند خودِ خانه یا همتای آن برگردد. در این تمرین، هم جدول واقعاً ساخته میشود و هم جرمِ خروجی از تمامِ حالتهای یک جهانِ کوچک کنترل میشود.
سه وزن که احتمال نیستند
وزنهای اصیل۱،۲ و۳ را برای نمادهای صفر،یک ودو میگذاریم. جمعِ وزنها۶ است؛ بنابراین احتمالها۱/۶،۱/۳ و۱/۲ میشوند. وزنِ خامِ ۳ را نباید احتمالِ ۳ یا تعدادِ قطعیِ وقوع در هر شش قرعه نامید. اینجا توزیعِ انتخابِ با جایگذاری را تعریف کردهایم.
برای ساخت، هر احتمال را در تعدادِ خانهها، یعنی۳، ضرب میکنیم. جرمهای مقیاسشده۱/۲،۱ و۳/۲ هستند. یک خانه کمتر از ظرفیتِ یک دارد و یک خانه بیشتر؛ کمبودِ اولی را از دومی پُر میکنیم. دفترِ construction مقدارِ قبل و بعدِ این جابهجایی را ثبت میکند.
خودِ جدول چه چیزی نگه میدارد؟
برای خانهٔ صفر، آستانهٔ q برابر۱/۲ و alias برابر۲ میشود. دو خانهٔ دیگر آستانهٔ یک دارند و همیشه خودشان را برمیگردانند. فهرستِ نهاییِ آستانهها [۱/۲،۱،۱] و همتاها [۲،۱،۲] است. نگهداشتنِ همین دو آرایه، با نگهداشتنِ وزنهای خام فرق دارد.
تابعِ انتخاب، شمارهٔ یک خانه و یک مقدار در بازهٔ نیمهبازِ صفر تا یک میگیرد. اگر مقدار کوچکتر از آستانه باشد، خودِ خانه برمیگردد؛ در غیر این صورت همتای آن. در تساویِ دقیقِ ۱/۲ برای خانهٔ صفر، همتا انتخاب میشود. صفر مجاز است؛ یک، بیرونِ قراردادِ مقدارِ قرعه است و رد میشود.
تمامِ دوازده حالت را بشماریم
برای هر یک از سه خانه، چهار مقدارِ ۱/۸،۳/۸،۵/۸ و۷/۸ را قرار میدهیم. در این جهانِ آموزشیِ صریح، هر جفتِ خانه و مقدار یکدوازدهم احتمال دارد. تابع را برای هر دوازده جفت اجرا میکنیم؛ تعدادِ خروجیهای صفر،یک ودو بهترتیب۲،۴ و۶ میشود.
پس احتمالهای بازسازیشده۲/۱۲،۴/۱۲ و۶/۱۲ دقیقاً با۱/۶،۱/۳ و۱/۲ برابرند. این شمارش را اندازهگیریِ تجربیِ چند قرعهٔ تصادفی یا اثباتِ امنیتِ مولد معرفی نمیکنیم؛ جهانِ متناهیِ تست را خودمان تعریف کردهایم.
دو کنترلِ مستقل از مسیرِ انتخاب
کنترلِ اول، سهمِ تحلیلیِ هر خانه را جمع میکند: q[i]/۳ به خودش و باقیِ سهمِ یکسوم به همتایش میرود. کنترلِ دوم از CDF مرجع استفاده میکند و شش بلیتِ هماحتمال را بدونِ جدولِ alias به نمادها نگاشت میدهد. تعدادهای۱،۲ و۳ این مسیر هم همان نسبتِ وزنها را میسازند.
وزنِ صفر در [۰،۱،۰]، یک نمادِ تنها، سه وزنِ برابر و [۲،۰،۳،۱] جدا ساخته و بازسازی شدهاند. فهرستِ خالی، همهصفر، وزنِ منفی، بولین، NaN و فهرستِ بیش از۸عضو در قراردادِ محلی رد میشوند. تمامِ وزنهای پذیرفتهشده صحیح یا Fraction و حداکثر۱۰۰ هستند.
چه وقت باید جدول را دوباره ساخت؟
اگر وزنها را از [۱،۲،۳] به [۳،۲،۱] عوض کنیم، احتمالِ هدفِ تازه۱/۲،۱/۳ و۱/۶ است؛ جدولِ قدیمی همچنان توزیعِ قدیمی را میدهد. کد این اختلاف را واقعاً کنترل میکند. تازهکردنِ متغیرِ weights، دو آرایهٔ ازپیشساخته را خودکار تغییر نمیدهد.
هزینهٔ ساخت و حافظه از مسیرِ هر انتخاب جداست؛ این تمرین benchmark سرعتِ محصول نیست. نمونهگیریِ مخزن برای جریانِ با طولِ نامعلوم قراردادِ دیگری دارد و انتخاب در تولیدِ متن هم به معنیِ اجرایِ این جدول نیست. ادامه در مبانی هوش مصنوعی؛ وجودِ Alias Table در خدماتِ اپرا از این مثال نتیجه نمیشود.
فایل تمرین و منبع
کد مستقلِ تمرین و کنترلها؛ Python · ورودیها و تمام خروجی واقعیِ همین تمرین؛ JSON
منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.