تأیید اجرای Rust از پیوندهای رقص کنوت با استفاده از ACL2: پیوندهای رقص

مفهوم پیوندهای رقص بسیار ساده است: هنگامی که یک عنصر Y از یک لیست در یک الگوریتم پوشش دقیق حذف می شود، به احتمال بسیار زیاد همین عنصر بعداً بازیابی می شود. بنابراین، بلکه

شکل 1: پیوندهای رقص در عمل.  (الف) بخشی از یک لیست دایره ای با پیوند دوگانه قبل از عملیات حذف؛  (ب) پس از عملیات حذف در عنصر Y؛  (ج) پس از عملیات بازیابی عنصر Y.شکل 1: پیوندهای رقص در عمل.  (الف) بخشی از یک لیست دایره ای با پیوند دوگانه قبل از عملیات حذف؛  (ب) پس از عملیات حذف در عنصر Y؛  (ج) پس از عملیات بازیابی عنصر Y.

به جای «صفر کردن» پیوندهای «قبلی» و «بعدی» مرتبط با عنصر Y، همانطور که بهداشت برنامه‌نویسی خوب معمولاً حکم می‌کند، در Dancing Links، برنامه‌نویس مقادیر پیوند را برای عنصر حذف شده باقی می‌گذارد. عملگر Dancing Links حذف می کند بنابراین عنصر Y را از لیست حذف می کند، عنصر “بعدی” عنصر قبلی X را به عنصر Z زیر تنظیم می کند، و عنصر “قبلی” Z را به پیوندی به X تنظیم می کند، اما “” را لمس نمی کند. پیوندهای بعدی و «قبلی» عنصر حذف شده Y. بعداً، اگر Y نیاز به بازیابی داشته باشد، به سادگی با استفاده از یک عملگر بازیابی ساده به لیست متصل می شود. به قول Knuth، اگر کسی پیوندهای لیست را در حالی که الگوریتم DLX ادامه می‌دهد، رصد کند، پیوندها به نظر می‌آیند که «رقص» می‌کنند، از این رو نام آن است. عملکرد Knuth's Dancing Links در شکل 1 خلاصه شده است.

Source link