KMP কি?
kmp স্ট্রিং ম্যাচিং এ্যালগরিদম। Kmp লিনিয়ার টাইমে একটা স্ট্রিং T তে একটা প্যাটার্ন স্ট্রিং P কতবার আছে এবং কোন কোন পজিশনে আছে তা বের করে।
KMP কিভাবে কাজ করে?
Kmp কিভাবে কাজ করে তা বুঝার আগে একটা স্ট্রিং T থেকে প্যাটার্ন স্ট্রিং P কতবার ও কোথায় আছে তার naive solution টা দেখে নেয়া জরুরী।
Naive solution:
উপরে solution এ T এর প্রতি পজিশন থেকে P স্ট্রিং ম্যাচ করে দেখা হচ্ছে এবং
কোথাও ম্যাচ না পেলে আবার P স্ট্রং এর প্রথম পজিশনে গিয়ে ম্যাচ করে দেখা
হচ্ছে।
Kmp এ্যালগরিদম ম্যাচ না পেলে P স্ট্রিং এর বার বার প্রথম পজিশন এ গিয়ে ম্যাচ
করানোর জিনিস টা স্কিপ করে।
Kmp এ্যালগরিদমে একটা ফাংশন থাকে যাকে prefix/π/failure ফাংশন বলা হয়ে থাকে।
এই ফাংশন একটা π এ্যারে তৈরী করে দেয়, যাতে প্যাটার্ন স্ট্রিং P এর
সব পজিশনে কতটুক প্রিফিক্স ম্যাচ করে তা থাকে।
যখনেই T স্ট্রিং এর কোন পজিশন এ P এর স্ট্রিং এর কোন পজিশন মিস ম্যাচ হবে, তখন π এ্যারে দেখে P স্ট্রিং এর কোন পজিশনে যাবে তা নির্ধারন করা হয়।
ধরা যাক P স্ট্রিং [P1P2,P3,P4,P5,P6] এর π এ্যারে [0,0,1,2,3,0,1] এমন।
এখন একটা T স্ট্রিং আছে [x1x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13] এমন।

এখন T স্ট্রিং এর সাথে P স্ট্রং ম্যাচ করতে করতে x8, P5 মিস ম্যাচ হল, তাহলে π[5] পজিশন এ জাম্প করবে এবং দেখবে P স্ট্রিং এর পরের পজিশন T এর current পজিশনের সাথে ম্যাচ করে নাকি। যদি ম্যাচ করে তাহলে পরবর্তী সার্চ সেখান থেকে শুরু হবে। কারন আমি T স্ট্রিং এর সাথে P স্ট্রং এর π[5] পর্যন্ত প্রিফিক্স ম্যাচ করে আসেছি। আর যদি ম্যাচ না করে তাহলে সেই পজিশনের π পজিশনে আবার জাম্প করবে ঠিক করবে কোথায় থেকে ম্যাচিং শুরু করবে।
Compute Prefix/Failure function:
Here Green character need to match, Red character mismatch, Blue character match.
Pattern string: “ababaca”
π array calculation steps for this
string
KMP-Matcher:
Here Blue part current matching, Green part previously match and Red part current mismatch.
Text String T=”ababababacaab”, Pattern String P=”ababaca”
Complexity analysis:
Compute prefix function এ লাইন 9 while loop execute হবে O(m) times. এখন k=0
এবং 7-12 লাইনে for loop এ k সর্বোচ্চ প্রতিবার বাড়তে পারে আর k এর সর্বোচ্চ
মান মনে m-1।
আবার k<i এবং π[i]
সুতরাং kmp algorithm এর total complexity: Θ(n+m).
All together:
ইনপুট নেয়া লাগবে index 1 থেকে।
Reference:
1. Introduction to Algorithms – Cormen
2. wiki
Practice problem:
বিদ্রঃ কোথায় ভুল থাকলে বা বুঝতে সমস্যা হলে কমেন্টে জানানোর জন্য অনুরোধ করা হল।
Happy Coding 😀 😀
No comments:
Post a Comment