رفتن به محتوای اصلی
بازگشت به وبلاگ

داده و اتصال فنی

HyperLogLog؛ تعداد اعضای یکتا بعد از ادغام چطور برآورد می‌شود؟

رجیستر،rho و ادغامِ دو خلاصهٔ سازگار را اجرا کنید؛برآوردِ خام و اصلاحِ کوچک با مرجعِ دقیقِ اجتماع و۴۰۹۶کنترلِ بیتی همراه‌اند.

HyperLogLog تعدادِ مقدارهایِ متمایز را برآورد می‌کند؛ فهرستِ آن‌ها یا جوابِ قطعیِ عضویت نمی‌دهد. برای ترکیبِ دو خلاصهٔ سازگار، رجیسترهایِ متناظر را بیشینه می‌گیریم، نه اینکه دو برآورد را جمع کنیم. این تمرینِ کوچک، هم‌پوشانیِ دو مجموعه، اصلاحِ محدودهٔ کوچک و شرطِ سازگاریِ hash را واقعاً کنترل می‌کند.

دو فهرست با چهار عضوِ مشترک

فهرستِ A رشته‌هایِ «۰» تا «۹» و B رشته‌هایِ «۶» تا «۱۹» در نمایشِ ASCII است. تعدادِ ورودی‌ها ۱۰ و ۱۴ اما تعدادِ متمایزِ اجتماع ۲۰ است؛ چهار عضوِ ۶ تا ۹ مشترک‌اند. این شناسه‌ها آموزشی‌اند و هیچ کاربر یا بازدیدِ واقعیِ سایت را نمایندگی نمی‌کنند.

در پروفایلِ صریحِ کد، متن با UTF-8 به SHA-256 می‌رود و فقط ۶۴ بیتِ نخست با ترتیبِ big-endian خوانده می‌شود. چهار بیتِ نخست یکی از ۱۶ رجیستر را انتخاب می‌کند و ۶۰ بیتِ بعدی برای rho است. تعریفِ اصلیِ منبع نمونهٔ ۳۲ بیتی دارد؛ این پوششِ ۶۴ بیتی را همان پیاده‌سازیِ کاملِ منبع نمی‌نامیم.

رجیستر چه چیزی را نگه می‌دارد؟

rho جایگاهِ نخستینِ بیتِ یک در بخشِ باقی‌مانده است، با شمارهٔ آغازِ ۱. اگر ۶۰ بیت همه صفر باشند، rho را ۶۱ می‌گذاریم. هر رجیستر از صفر شروع می‌شود و بزرگ‌ترینِ rho یِ برخوردکرده را نگه می‌دارد؛ تعدادِ ورود به آن رجیستر ذخیره نمی‌شود.

آزمونِ مستقل، برای ۴۰۹۶ پسوندِ کوچک نمایشِ باینریِ ۶۰ بیتی می‌سازد و جایِ نخستینِ یک را مستقیم پیدا می‌کند. مرزهایِ همه‌صفر، یکِ کم‌ارزش، یکِ پرارزش و تمام‌یک نیز جدا ثبت‌اند. تکرارِ همان فهرستِ A رجیسترها را عوض نمی‌کند؛ تکرارِ داده cardinality را دوبرابر نمی‌سازد.

برآوردِ خام و اصلاحِ کوچک را جدا ببینیم

با m=۱۶ و ضریبِ ۰٫۶۷۳، برآوردِ خام از ۰٫۶۷۳×m²تقسیم بر مجموعِ ۲ به‌توانِ منفیِ رجیسترها ساخته می‌شود. وقتی خام حداکثر ۲٫۵ m است و رجیسترِ صفر وجود دارد، اصلاحِ کوچک m×log(m/V) است؛ V تعدادِ رجیسترهایِ صفر است. هر دو عدد در خروجی محفوظ‌اند.

برای اجتماعِ همین اجرایِ واقعی، خام حدود ۲۰٫۷۲۶۳۷۶، تعدادِ صفرها ۴ و اصلاحِ کوچک حدود ۲۲٫۱۸۰۷۱۰ است. تعدادِ دقیقِ مرجع ۲۰ بود؛ برآورد را به ۲۰ گرد و «دقیق» نام‌گذاری نمی‌کنیم. این اختلاف، تغییرِ مخفیِ مجموعه یا تعدادِ ورودی‌ها نیست؛ خلاصهٔ احتمالی تمامِ شناسه‌ها را نگه نمی‌دارد.

اجتماع را روی رجیسترها انجام دهیم

از هر زوجِ رجیسترِ A و B، بیشینه گرفته می‌شود. نتیجه دقیقاً با ساختنِ یک sketch از تمامِ دو فهرست برابر است. برآوردِ کوچکِ A حدود ۱۱٫۰۹ و B حدود ۱۵٫۶۹ است؛ جمعِ آن‌ها قانونِ اجتماع نیست. حتی جمعِ تعدادهایِ دقیقِ ۱۰ و ۱۴، چهار عضوِ مشترک را دوبار می‌شمارد.

جابجاییِ ترتیبِ دو sketch، ادغام با خود و ادغام با خالی نیز کنترل شده‌اند. ولی این خاصیت فقط برای رجیسترهایِ هم‌پروفایل استفاده می‌شود؛ عوض‌شدنِ الگوریتمِ hash، کدگذاری، بیت‌بندی یا precision می‌تواند معنایِ خانهٔ متناظر را تغییر دهد. تابعِ محلی پروفایلِ ناسازگار را رد می‌کند.

خالی و نامعتبر را روشن تعریف کنیم

برای دادهٔ خالی، خام ۱۰٫۷۶۸ است اما اصلاحِ کوچک ۰ می‌دهد. پس raw به‌تنهایی حتی مرزِ خالی را درست نشان نمی‌دهد. شش ورودیِ نامعتبر، از رشتهٔ خالی و نوعِ غیرمتن تا پروفایلِ ناسازگار، rho بیرونِ محدوده و بیش از ۲۵۶ ورودی رد می‌شوند؛ هر token حداکثر ۶۴ بایت است.

این کد اصلاحِ large-range، HLL++یا سنجشِ تجربیِ توزیعِ خطا ندارد. hash ثابت و یک مثال، استقلال یا یکنواختیِ ایده‌آل را اثبات نمی‌کنند. Bloom filter احتمالِ عضویت و MinHash شباهتِ مجموعه‌ها را می‌سنجد؛ این صفحه تعدادِ متمایز را برآورد می‌کند. ادامه در مبانی هوش مصنوعی؛ هیچ آمارِ سایت یا روشِ ناشناس‌سازیِ اپرا از آن نتیجه نمی‌شود.

فایل تمرین و منبع

کد کاملِ تمرینِ مستقل و کنترل‌ها؛ Python · ورودی و تمامِ خروجیِ اجرای واقعی؛ JSON

منابع در 2026-11-04 خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثال‌ها و فایل‌های این راهنما آموزشی و ساختهٔ تحریریه‌اند.

برای این نیاز، کدام خدمت مناسب‌تر است؟

تماس و منشی، چت سایت و تحلیل مکالمه سه مسیر متفاوت‌اند. ابتدا خدمت متناسب نیازتان را انتخاب کنید.

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه