সীমাবদ্ধ অটোমেটা থেকে নিয়মিত অভিব্যক্তিতে রূপান্তরটি করতে বিভিন্ন পদ্ধতি রয়েছে। এখানে আমি স্কুলে সাধারণত পড়ানো একটি বর্ণনা করব যা খুব চাক্ষুষ। আমি বিশ্বাস করি এটি অনুশীলনে সর্বাধিক ব্যবহৃত হয়। যাইহোক, অ্যালগরিদম লেখা এত ভাল ধারণা নয়।
রাষ্ট্র অপসারণ পদ্ধতি
এই অ্যালগরিদমটি অটোমেটনের গ্রাফ পরিচালনা করার বিষয়ে এবং সুতরাং এটি আলগোরিদিমগুলির পক্ষে খুব উপযুক্ত নয় কারণ এটির জন্য ... রাষ্ট্র অপসারণের মতো গ্রাফের আদিম প্রয়োজন। আমি এটি উচ্চ স্তরের আদিম ব্যবহার করে বর্ণনা করব।
মূল ধারণা
ধারটি নিয়মিত বহিঃপ্রকাশগুলি বিবেচনা করা এবং এরপরে মধ্যবর্তী রাজ্যগুলি অপসারণ করার সময় ধারণাটি হ'ল।
মূল প্যাটার্নটি পরিসংখ্যানগুলিতে নিম্নলিখিতটিতে দেখা যাবে। প্রথমটিতে মধ্যে লেবেল রয়েছে যা নিয়মিত প্রকাশ হয় ই , এফ , জি , এইচ , আই এবং আমরা কিউ অপসারণ করতে চাই ।p,q,re,f,g,h,iq
একবার মুছে ফেলা হলে আমরা একসাথে রচনা করি ( পি এবং আর এর মধ্যে অন্য প্রান্তগুলি সংরক্ষণ করার সময় কিন্তু এটি এতে প্রদর্শিত হয় না):e,f,g,h,ipr
উদাহরণ
রাফেলের উত্তরে একই উদাহরণ ব্যবহার করে :
আমরা ধারাবাহিকভাবে অপসারণ :q2
q3
q1q1
(ab+(b+aa)(ba)∗(a+bb))∗
অ্যালগরিদম
L[i,j]
qiqj
for i = 1 to n:
for j = 1 to n:
if i == j then:
L[i,j] := ε
else:
L[i,j] := ∅
for a in Σ:
if trans(i, a, j):
L[i,j] := L[i,j] + a
qk
remove(k):
for i = 1 to n:
for j = 1 to n:
L[i,i] += L[i,k] . star(L[k,k]) . L[k,i]
L[j,j] += L[j,k] . star(L[k,k]) . L[k,j]
L[i,j] += L[i,k] . star(L[k,k]) . L[k,j]
L[j,i] += L[j,k] . star(L[k,k]) . L[k,i]
star(ε)=ε
e.ε=e
∅+e=e
∅.e=∅
∅εqiqkqjqk
এখন, কিভাবে ব্যবহার করবেন remove(k)
? আপনার চূড়ান্ত বা প্রাথমিক অবস্থা হালকাভাবে মুছে ফেলা উচিত নয়, অন্যথায় আপনি ভাষার কিছু অংশ মিস করবেন।
for i = 1 to n:
if not(final(i)) and not(initial(i)):
remove(i)
আপনার যদি কেবলমাত্র একটি চূড়ান্ত রাষ্ট্রীয় এবং একটি প্রাথমিক রাষ্ট্রের তবে চূড়ান্ত হ'ল:qfqs
e := star(L[s,s]) . L[s,f] . star(L[f,s] . star(L[s,s]) . L[s,f] + L[f,f])
আপনার যদি বেশ কয়েকটি চূড়ান্ত রাজ্য (বা এমনকি প্রাথমিক অবস্থাগুলি) থাকে তবে ট্রানজিটিভ ক্লোজার পদ্ধতি প্রয়োগ করা ব্যতীত এগুলি মার্জ করার কোনও সহজ উপায় নেই। সাধারণত এটি হাত দ্বারা কোনও সমস্যা হয় না তবে অ্যালগরিদম লেখার সময় এটি বিশ্রী হয়। অনেক বেশী সাদাসিধে কার্যসংক্রান্ত সবকিছুর যুগল গনা হয় এবং (ইতিমধ্যে রাষ্ট্রীয় সরানো হয়েছে) গ্রাফে অ্যালগরিদম সব এক্সপ্রেশন পেতে চালানোর ত শুধুমাত্র প্রাথমিক অবস্থায় নেই এবং শুধুমাত্র চূড়ান্ত রাষ্ট্র, তাহলে সব ইউনিয়ন করছেন ।(s,f)es,fsfes,f
এটি এবং এটি সত্য যে এটি প্রথম পদ্ধতির তুলনায় ভাষাগুলিকে আরও গতিময়ভাবে সংশোধন করছে যা প্রোগ্রামিংয়ের সময় এটিকে আরও ত্রুটি-প্রবণ করে তোলে। আমি অন্য কোনও পদ্ধতি ব্যবহার করার পরামর্শ দিচ্ছি।
কনস
এই অ্যালগরিদমে অনেকগুলি কেস রয়েছে, উদাহরণস্বরূপ, কোন নোডটি আমাদের অপসারণ করা উচিত তা বেছে নেওয়ার জন্য, শেষে চূড়ান্ত রাজ্যের সংখ্যা, একটি চূড়ান্ত রাষ্ট্র প্রাথমিকও হতে পারে তা সত্য ইত্যাদি etc.
মনে রাখবেন যে এখন অ্যালগরিদমটি লেখা হয়েছে, এটি অনেকটা ট্রানজিটিভ ক্লোজার পদ্ধতির মতো। শুধুমাত্র ব্যবহারের প্রসঙ্গটি ভিন্ন। আমি অ্যালগরিদম বাস্তবায়নের পরামর্শ দিচ্ছি না, তবে হাত দ্বারা এটি করার জন্য পদ্ধতিটি ব্যবহার করা ভাল ধারণা।