تابع درهم‌سازی کامل

در علوم رایانه، یک تابع درهم سازی کامل برای مجموعه S تابع هشی است که عناصر مجزا از S را بدون برخورد به مجموعه ای از اعداد صحیح مرتبط می‌کند. از نظر ریاضی، یک تایع یک به یک است.

یک عملکرد کمترین هش کامل برای چهار نام نشان داده شده
یک تابع هش کامل برای چهار نام نشان داده شده

توابع هش کامل ممکن است برای پیاده‌سازی جدول جستجوی با بدترین زمان دسترسی استفاده شود. یک تابع هش کامل دارای بسیاری از کاربردهای مشابه توابع هش دیگر است، با این برتری که نیازی به بررسی مشکل برخورد ندارد. علاوه بر این، اگر کلیدها داده نباشند، لازم نیست کلیدها در جدول جستجو ذخیره شوند و موجب صرفه جویی در حافظه می‌شوند.

کاربرد ویرایش

با قرار دادن کلیدهای S (یا سایر مقادیر مرتبط) در یک جدول جستجوی فهرست شده (با اندیس) بوسیله خروجی این تابع، یک تابع درهم سازی کامل با مقادیر محدود می‌تواند برای یه عملیات جست و جوی کارآمد استفاده شود. سپس می‌توان با جستجوی سلول کلید مورد نظر در جدول، وجود کلید در S را آزمایش کرد یا مقدار متناظر با آن را جستجو کرد. هرگونه جستجو در بدترین حالت در زمان ثابت صورت می‌گیرد.[۱]

ساختن ویرایش

یک تابع درهم سازی کامل برای یک مجموعه خاص S می‌تواند در زمان ثابت تعیین شود. یا با مقادیر موجود در یک محدوده کوچک، توسط یک الگوریتم تصادفی در تعدادی از عملیات‌ها که (که تعداد آن متناسب با اندازه S می‌باشد) می‌تواند جستجو شود. روش ساختن (Fredman، Komlós و Szemerédi 1984) از یک طرح دو سطحی استفاده می‌کند تا یک مجموعه S از n عنصر به طیف وسیعی از O(n) شاخص مرتبط (نقشه) کند، و پس از آن هر شاخص به طیف وسیعی از مقادیر هش مرتبط می‌شود. سطح اول ساخت آنها، یک p اول بسیار بزرگ (بزرگتر از اندازه مجموعه ای که S از آن ترسیم شده‌است)، و یک پارامتر k انتخاب می‌کند و هر عنصر x از S را به نمایه (اندیس) خودش مرتبط می‌کند.

 

اگر k به‌طور تصادفی انتخاب شود، این مرحله به احتمال زیاد دچار برخورد می‌شود، اما تعداد عناصر ni که همزمان به همان اندیس i مرتبط (هش) می‌شوند، احتمالاً اندک است. در سطح دوم ساخت آن به هر اندیس یا شاخص i دامنه O(ni2) از اعداد صحیح را مرتبط می‌کند. سطح دوم از یک مجموعه دومی شامل توابع ماژولار خطی برای هر اندیس i استفاده می‌کند تا هر عضو x از S را به محدودهg(x) مرتبط می‌کند.[۱]

(Fredman، Komlós و Szemerédi 1984) نشان می‌دهند ، انتخابی برای k وجود دارد طوری که مجموع طول دامنه‌ها برای n مقدار متفاوت (g(x برابر (O(n باشد. همچنین، برای هر مقدار g(x)، یک تابع ماژولار خطی وجود دارد که زیر مجموعهٔ مطابقت یافته S را با محدوده مربوط به آن مقدار مرتبط می‌کند. چه توابع سطح دوم چه k به ازای هر مقدار g(x) با انتخاب مقادیر تصادفی تا زمانی که یکی از آنها را بیابد می‌تواند در زمان چند جمله ای کار کند.[۱]

این تابع درهم سازی به خودی خود نیاز به فضای حافظهO(n) دارد تا k و p و همه توابع سطح دوم خطی ماژولار را ذخیره کند. محاسبه مقدار هش یک کلید x داده شده احتمالاً در زمان ثابت با محاسبه g(x)، جستجو با تابع سطح دوم مرتبط با g(x) و اجرای این تابع روی انجام می‌شود. یک نسخه اصلاح شده از این طرح دو سطحی با تعداد بیشتری از مقادیر در سطح بالا می‌تواند برای ساختن یک تابع درهم سازی کامل استفاده شود که S را به محدوده کوچکتری با پیچیدگی n + o(n) مرتبط می‌کند (هش می‌کند).[۱]

مرزهای پایین حافظه ویرایش

استفاده از کلمات حاوی اطلاعات O(n) برای ذخیره تابع (Fredman، Komlós و Szemerédi 1984) تقریباً بهینه است: هر تابع درهم سازی کامل که در زمان ثابت قابل محاسبه باشد حداقل به تعدادی بیت نیاز دارد که متناسب با اندازه S می‌باشد[۲]

برنامه‌های افزودنی ویرایش

در هم سازی کامل پویا ویرایش

استفاده از یک تابع درهم سازی کامل در شرایطی که یک مجموعه بزرگ که کاملاً پرس و جو شده وجود دارد، S، که به ندرت به روز می‌شود، بهترین گزینه است. این امر به این دلیل است که هرگونه اصلاح مجموعه S ممکن است باعث شود تابع درهم سازی دیگر برای مجموعه تغییر یافته کامل نباشد. روش‌هایی که تابع درهم سازی را به روز می‌کند هر زمان که مجموعه تغییر یابد، به عنوان درهم سازی کامل پویا شناخته می‌شوند،[۳] اما این روش‌ها برای پیاده‌سازی نسبتاً پیچیده هستند.

یک تابع درهم سازی کامل حداقلی یک نوع تابع درهم سازی کامل است که n کلید را به n عدد صحیح متوالی - معمولاً اعداد از ۰ تا n − ۱ یا از ۱ تا n مرتبط می‌سازد (نقشه یا هش می‌کند). یک روش معمول برای اجرای این موارد: اجازه دهید j و k عناصر برخی از مجموعه S محدود باشند. F یک تابع هش کامل حداقلی است اگر و تنها اگر F(j) = F(k) دلالت بر j = k (تزریق) کند و یک عدد صحیح مانند a وجود داشته باشد طوری که برد F برابر a..a + |S| − ۱ می‌باشد. ثابت شده‌است که برد هدف اصلی یک تابع درهم سازی کامل حداقل به ۱٫۴۴ بیت / کلید نیاز دارد.[۴] در صورت اختصاص زمان کافی، بهترین توابع درهم سازی کامل حداقلی شناخته شده در حال حاضر با استفاده کمتر از ۲٫۱ بیت / کلید ارائه شده‌است.[۵][۶]

منابع ویرایش

  1. ۱٫۰ ۱٫۱ ۱٫۲ ۱٫۳ Fredman, Michael L.; Komlós, János; Szemerédi, Endre (1984), "Storing a Sparse Table with O(1) Worst Case Access Time", Journal of the ACM, 31 (3): 538, doi:10.1145/828.1884, MR 0819156
  2. Fredman, Michael L.; Komlós, János (1984), "On the size of separating systems and families of perfect hash functions", SIAM Journal on Algebraic and Discrete Methods, 5 (1): 61–68, doi:10.1137/0605009, MR 0731857.
  3. Dietzfelbinger, Martin; Karlin, Anna; Mehlhorn, Kurt; Meyer auf der Heide, Friedhelm; Rohnert, Hans; Tarjan, Robert E. (1994), "Dynamic perfect hashing: upper and lower bounds", SIAM Journal on Computing, 23 (4): 738–761, doi:10.1137/S0097539791194094, MR 1283572.
  4. Belazzougui, Djamal; Botelho, Fabiano C.; Dietzfelbinger, Martin (2009), "Hash, displace, and compress" (PDF), Algorithms—ESA 2009: 17th Annual European Symposium, Copenhagen, Denmark, September 7-9, 2009, Proceedings (PDF), Lecture Notes in Computer Science, vol. 5757, Berlin: Springer, pp. 682–693, doi:10.1007/978-3-642-04128-0_61, MR 2557794.
  5. RecSplit
  6. Belazzougui, Djamal; Botelho, Fabiano C.; Dietzfelbinger, Martin (2009), "Hash, displace, and compress" (PDF), Algorithms—ESA 2009: 17th Annual European Symposium, Copenhagen, Denmark, September 7-9, 2009, Proceedings (PDF), Lecture Notes in Computer Science, vol. 5757, Berlin: Springer, pp. 682–693, doi:10.1007/978-3-642-04128-0_61, MR 2557794.

پانویس ویرایش