Loading [MathJax]/jax/output/HTML-CSS/jax.js

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۱۴:الگوریتم ها:سوال ۶

جعبه‌ی سیاه

یک compacttrie نوعی trie است که روی هر یال آن به جای یک حرف، یک رشته نوشته شده است.

فرض کنید یک رشته‌ی s‌داریم یک prefixtrie از روی این رشته به این صورت ساخته می‌شود. به ازای هر i کم‌تر مساوی طول رشته‌ی s، رشته‌ای از حروف iام، i+1ام،… تا آخر رشته‌ی s تشکیل شده است را در trie وارد می‌کنیم. یک compactprefixtrie برای رشته‌ي s‌یک prefixtrie است که compact نیز می‌باشد.

فرض کنید یک جعبه‌ی سیاه داریم که برای یک رشته‌ی s در زمان O(n)، compactprefixtrie آن را محاسبه می‌کند( می‌توانید فرض کنید که این درخت حداکثر O(n) راس دارد. در ضمن جعبه‌ی سیاه کلیه‌ي یال‌ها و رئوس trie را به ما می‌دهد.)

می‌گوییم رشته‌ی w زیر رشته‌ی رشته‌ی v است، (فرض کنید طول رشته‌ی w،lw باشد) اگر یک i وجود داشته باشد به طوری که رشته‌ای که از حروف iام، i+1ام،… تا i+lw1ام رشته‌ی v تشکیل شده است مشاوی رشته‌ی w باشد.

مسئله‌ی LCS(longestcommonsubstring) به این صورت تعریف می‌شود:

دو رشته‌ی s و v داده شده است. بزرگ‌ترین رشته‌ای را بیابید که هم زیر رشته‌ی s و هم زیر رشته‌ی v باشد.

الگوریتمی از O(n) بیابید که مسئله‌ی LCS را حل کند.(بالتبع می‌توانید در راه حل خود از جعبه‌ی سیاه استفاده کنید.)


ابزار صفحه