এটা কিভাবে কাজ করে?
অটোমেটা তত্ত্বটি একবার দেখুন
সংক্ষেপে, প্রতিটি নিয়মিত অভিব্যক্তির সমতুল্য সসীম অটোম্যাটন থাকে এবং সীমাবদ্ধ অটোমেটনে সংকলন এবং অনুকূলিত করা যায়। জড়িত অ্যালগরিদমগুলি অনেক সংকলক বইয়ে পাওয়া যায়। এই অ্যালগরিদমগুলি ইউনিক্স এবং গ্রেপের মতো ইউনিক্স প্রোগ্রাম দ্বারা ব্যবহৃত হয়।
তবে বেশিরভাগ আধুনিক প্রোগ্রামিং ভাষা (পার্ল, পাইথন, রুবি, জাভা (এবং জেভিএম ভিত্তিক ভাষা), সি #) এই পদ্ধতির ব্যবহার করে না approach তারা একটি পুনরাবৃত্তিমূলক ব্যাকট্র্যাকিং পদ্ধতির ব্যবহার করে যা একটি গাছে নিয়মিত ভাব প্রকাশ করে বা নিয়মিত অভিব্যক্তির বিভিন্ন উপ-অংশকে উপস্থাপন করে এমন একটি ক্রমানুসারে সংযোজন করে। বেশিরভাগ আধুনিক "রেগুলার এক্সপ্রেশন" সিনট্যাক্সগুলি ব্যাক-রেফারেন্স দেয় যা নিয়মিত ভাষার গোষ্ঠীর বাইরে থাকে (তাদের সসীম অটোমেটার কোনও উপস্থাপনা নেই), যা পুনরাবৃত্তিমূলক ব্যাকট্র্যাকিং পদ্ধতির ক্ষেত্রে তুচ্ছভাবে প্রয়োগযোগ্য।
অপ্টিমাইজেশন সাধারণত আরও দক্ষ রাষ্ট্র মেশিন দেয় yield উদাহরণস্বরূপ: aaaab | aaaac | aaad বিবেচনা করুন, একটি সাধারণ প্রোগ্রামার দশ মিনিটের মধ্যেই সহজ তবে কম দক্ষ অনুসন্ধান প্রয়োগ (পৃথকভাবে তিনটি স্ট্রিং তুলনা করে) পেতে পারে; তবে এটি আআ [বিসিডি] এর সমতুল্য অনুধাবন করে, প্রথম চারটি 'এ' অনুসন্ধান করে [খ, সি, ডি] এর বিপরীতে ৫ ম চরিত্রটি পরীক্ষা করে আরও ভাল অনুসন্ধান করা যেতে পারে। অপ্টিমাইজেশনের প্রক্রিয়াটি বহু বছর আগে আমার অন্যতম সংকলক হোম ওয়ার্ক ছিল তাই আমি ধরে নিলাম এটি বেশিরভাগ আধুনিক নিয়মিত এক্সপ্রেশন ইঞ্জিনেও রয়েছে।
অন্যদিকে, রাষ্ট্রীয় মেশিনগুলি স্ট্রিং গ্রহণ করার সময় কিছুটা সুবিধা পায় কারণ তারা একটি "তুচ্ছ বাস্তবায়ন" এর তুলনায় বেশি স্থান ব্যবহার করে। এসকিউএল স্ট্রিংগুলিতে উদ্ধৃতি উদ্ধার করার জন্য একটি প্রোগ্রাম বিবেচনা করুন, যা: 1) একক উদ্ধৃতি চিহ্ন দিয়ে শুরু হয় এবং শেষ হয়; 2) একক উদ্ধৃতি চিহ্ন পরপর দুটি একক উদ্ধৃতি দ্বারা পালানো হয়। সুতরাং: ইনপুট ['a' ''] এর আউটপুট আউট করা উচিত [a ']। একটি রাষ্ট্রের মেশিনের সাহায্যে পরপর একক উদ্ধৃতি চিহ্ন দুটি রাজ্য পরিচালনা করে। এই দুটি রাজ্য ইনপুট ইতিহাস মনে রাখার উদ্দেশ্যটি পরিবেশন করে যে প্রতিটি ইনপুট অক্ষর ঠিক একবারে প্রক্রিয়া করা হয়, নিম্নলিখিত চিত্রের মতো:
...
S1->'->S2
S1->*->S1, output *, * can be any other character
S2->'->S1, output '
S2->*->END, end the current string
সুতরাং, আমার মতে, কিছু তুচ্ছ ঘটনাগুলিতে নিয়মিত প্রকাশটি ধীর হতে পারে তবে ম্যানুয়ালি কারুকৃত অনুসন্ধান অ্যালগরিদমের তুলনায় সাধারণত দ্রুততর হয়, এই সত্যটি প্রদান করে যে অপ্টিমাইজেশনটি নির্ভরযোগ্যভাবে মানুষের দ্বারা করা যায় না।
(এমনকি স্ট্রিং অনুসন্ধানের মতো তুচ্ছ ঘটনাগুলিতেও, একটি স্মার্ট ইঞ্জিন রাষ্ট্রের মানচিত্রে একক পাথকে স্বীকৃতি দিতে পারে এবং সেই অংশটিকে একটি সাধারণ স্ট্রিং তুলনায় কমাতে এবং রাজ্যগুলি পরিচালনা করতে এড়াতে পারে))
ফ্রেমওয়ার্ক / লাইব্রেরির একটি নির্দিষ্ট ইঞ্জিন ধীর হতে পারে কারণ ইঞ্জিনটি প্রোগ্রামার সাধারণত প্রয়োজন হয় না এমন অন্যান্য কিছু কাজ করে। উদাহরণ: .NET এ রেজেক্স ক্লাস ম্যাচ, গোষ্ঠী এবং ক্যাপচার সহ বস্তুর একটি গুচ্ছ তৈরি করে create