এনএফএ ব্যবহার না করে নিয়মিত এক্সপ্রেশন থেকে ডিএফএ কীভাবে তৈরি করবেন?


12

উদ্দেশ্যটি হ'ল নিয়মিত এক্সপ্রেশন থেকে ডিএফএ তৈরি করা এবং "নিয়মিত এক্সপ্রেস> এনএফএ> ডিএফএ রূপান্তর" ব্যবহার করা কোনও বিকল্প নয়। কিভাবে এটি করা উচিত?

আমি এই প্রশ্নটি আমাদের অধ্যাপকের কাছে জিজ্ঞাসা করেছি তবে তিনি আমাকে বলেছিলেন যে আমরা স্বজ্ঞাততা ব্যবহার করতে পারি এবং দয়া করে কোনও ব্যাখ্যা দিতে অস্বীকার করেছি। তাই আমি আপনাকে জিজ্ঞাসা করতে চেয়েছিলেন।

"নিয়মিত এক্সপ্রেস> এনএফএ> ডিএফএ রূপান্তর" কোনও বিকল্প নয় কারণ এ জাতীয় রূপান্তর বরং জটিল নিয়মিত প্রকাশকে রূপান্তর করতে অনেক সময় নেয়। উদাহরণস্বরূপ, একটি নির্দিষ্ট রেজেক্সের জন্য "রেজেক্স> এনএফএ> ডিএফএ" মানুষের জন্য 1 ঘন্টা সময় নেয়। আমার 30 মিনিটেরও কম সময়ে ডিজেএএতে রেজেেক্স রূপান্তর করতে হবে।


2
আপনার আরও প্রসঙ্গ সরবরাহ করতে হবে। আপনি বর্তমানে নিয়মিত প্রকাশের অনুবাদ করতে কী (অনানুষ্ঠানিক) অ্যালগরিদম ব্যবহার করছেন? উদাহরণস্বরূপ আপনার প্রক্রিয়াটি ব্যাখ্যা করা সহায়ক হতে পারে a(a|ab|ac)*a+। আপনি এটি কোনও এনডিএফএতে সরাসরি অনুবাদ করতে পারেন যা আপনি একটি ডিএফএ-তে হ্রাস করেছেন বা আপনি এটিকে এমন কোনও কিছুতে সাধারণীকরণ করতে পারেন যা অবিলম্বে কোনও ডিএফএ-তে মানচিত্র তৈরি করে।
amon

আপনার যে কোনও উপায়ে নির্দিষ্ট উদাহরণগুলিতে এটি করতে হবে, বা আপনার কম্পিউটার দ্বারা প্রয়োগ করার জন্য একটি সাধারণ পদ্ধতি সরবরাহ করতে হবে?
বাবু

উত্তর:


18

যেহেতু আপনি "৩০ মিনিটেরও কম সময়ে রেজেেক্সকে ডিএফএতে রূপান্তর করতে চান", তাই আমি মনে করি আপনি অপেক্ষাকৃত ছোট উদাহরণগুলিতে হাত দিয়ে কাজ করছেন।

এক্ষেত্রে আপনি ব্রাজোজস্কির অ্যালগরিদম ব্যবহার করতে পারেন , যা কোনও ভাষার সরাসরি নেরোড অটোমেটনের গণনা করে (যা তার ন্যূনতম নির্বিচারক অটোমেটনের সমান হিসাবে পরিচিত)। এটি ডেরিভেটিভসের প্রত্যক্ষ গণনার উপর ভিত্তি করে এবং এটি ছেদ এবং পরিপূরককে অনুমতি দেয় বর্ধিত নিয়মিত এক্সপ্রেশনগুলির জন্যও কাজ করে। এই অ্যালগরিদমের অপূর্ণতা হ'ল এটির জন্য, ব্যয়বহুল প্রক্রিয়াটির সাথে গণনা করা এক্সপ্রেশনগুলির সমতুল্যতা পরীক্ষা করা দরকার। তবে অনুশীলনে এবং ছোট উদাহরণগুলির জন্য এটি খুব দক্ষ efficient[1]

বাম ভাগফল । যাক একটি ভাষায় হতে একজন * দিন তোমার দর্শন লগ করা একটি শব্দ হবে। তারপর তোমার দর্শন লগ করা - 1 এল = { বনাম একজন * | তোমার দর্শন লগ করা v এল } ভাষা U - 1 এল একটি বলা হয় বাম ভাগফল (অথবা ব্যুৎপন্ন বাম ) এর এলLAu

u1L={vAuvL}
u1LL

নেরোড অটোমেটনNerode যন্ত্রমানব এর নির্ণায়ক যন্ত্রমানব হয় একটি ( এল ) = ( প্রশ্ন , একটি , , এল , এফ ) যেখানে প্রশ্ন = { U - 1 এল | তোমার দর্শন লগ করা একজন * } , এফ = { U - 1 এল | তোমার দর্শন লগ করা L } এবং ট্রানজিশন ফাংশন প্রতিটি a for এর জন্য সংজ্ঞায়িত করা হয় LA(L)=(Q,A,,L,F)Q={u1LuA}F={u1LuL} , সূত্র ( ইউ - 1 এল ) দ্বারা a = - 1 ( ইউ - 1 এল ) = ( ইউ ) - 1 এল এটি বরং বিমূর্ত সংজ্ঞা থেকে সাবধান থাকুন। প্রত্যেকটি রাষ্ট্র একটি একটি বাম ভাগফল হয় এল একটি শব্দ দ্বারা, এবং অত: পর একটি ভাষা একটি * । প্রাথমিক অবস্থায় ভাষা এল , এবং চূড়ান্ত রাজ্যের সেটের সব কিছু ফেলে রেখে quotients সমীকরণ হল এল একটি শব্দ এলaA

(u1L)a=a1(u1L)=(ua)1L
ALALLL

a,b

a11=0a1b={1if a=b0if aba1(L1L2)=a1L1u1L2,a1(L1L2)=a1L1u1L2,a1(L1L2)=a1L1u1L2,a1L=(a1L)L
a1(L1L2)={(a1L1)L2si 1L1,(a1L1)L2a1L2si 1L1

L=(a(ab))(ba)

11L=L=L1a1L1=(ab)(a(ab))=L2b1L1=a(ba)=L3a1L2=b(ab)(a(ab))(ab)(a(ab))=bL2L2=L4b1L2=a1L3=(ba)=L5b1L3=a1L4=a1(bL2L2)=a1L2=L4b1L4=b1(bL2L2)=L2b1L2=L2a1L5=b1L5=a(ba)=L3
সর্বনিম্ন অটোমেটন

[1]

সম্পাদনা করুন । (এপ্রিল ৫, ২০১৫) আমি সবেমাত্র আবিষ্কার করেছি যে একটি অনুরূপ প্রশ্ন: একটি ডিএফএ নির্মাণের জন্য কোন অ্যালগরিদম রয়েছে যা একটি প্রদত্ত রেইজেক্স দ্বারা বর্ণিত ভাষাটিকে স্বীকৃতি দেয়? সিথেরিতে জিজ্ঞাসা করা হয়েছিল। উত্তরটি আংশিক জটিলতার বিষয়গুলিকে সম্বোধন করে।


এই অ্যালগরিদমের জটিলতা সম্পর্কে আপনি আরও বলতে পারেন?
বাবু

@ বাবু একটি ডিএফএ-তে একটি আরইও রূপান্তর করা পিএসপিএসিই-হার্ড, সুতরাং এটি অবশ্যই ক্ষতিকারক।
jmite

এটি সম্ভবত উত্তরে যাওয়া উচিত। ওপিটি "এনএফএ হয়ে স্ট্যান্ডার্ড নির্মাণগুলি খুব ধীর" এর সাথে শুরু হয় এবং উত্তরের অংশটি "দুর্ভাগ্য, সত্যিই একটি দ্রুত সমাধান নেই" বলে মনে হচ্ছে। এটি এখানে স্ট্যান্ডার্ড নির্মাণের চেয়ে ভাল কিনা তা নিয়ে আলোচনা করা অবশেষ। (সিসি @ জ্যামাইট)
রাফেল

@ জমিট হ্যাঁ আমি এটি আশা করছিলাম। আমার প্রশ্নের কারণ হ'ল কেন তখন ডিএফএ তৈরির এই উপায়টিকে আরও সহজ বিবেচনা করা উচিত। (দ্রষ্টব্য: @ jmite উত্তরের বিষয়ে আমাকে অবহিত করতে সিস্টেমটি পুরো দিন সময় নিয়েছিল)।
বাবু

2

জে ই. আনুষ্ঠানিকতা এবং সম্পূর্ণতার দিক থেকে পিন আরও ভাল উত্তর সরবরাহ করে তবে আমি মনে করি যে আপনার "প্রফেসর" ইঙ্গিত করছেন এমন "স্বজ্ঞাত" জন্য কিছু বলা উচিত said

এর বেশিরভাগ ক্ষেত্রে, সবচেয়ে সহজ কাজটি হ'ল নিয়মিত ভাব প্রকাশ করা, কোন ভাষাটি গ্রহণ করছে তা বোঝা, তারপরে সেই ভাষাটি গ্রহণ করে কোনও ডিএফএ তৈরির জন্য আপনার সৃজনশীলতা / চতুরতা ব্যবহার করুন।

এটি করার সহজ সরল কোনও উপায় নেই, অন্যরা দেওয়া অ্যালগরিদমগুলি বাদে, তবে এখানে কিছু গাইডলাইন রয়েছে যা কার্যকর হিসাবে প্রমাণিত হতে পারে।

  1. নিজেকে জিজ্ঞাসা করুন, আমি কি কোনও প্রোগ্রাম লিখতে পারি যে কেবল এই বুলিয়ান বা খুব ছোট সংখ্যার ভেরিয়েবলগুলি ব্যবহার করে এই আরই গ্রহণ করে? তারপরে সেই প্রোগ্রামটি লিখুন এবং এটি একটি ডিএফএতে রূপান্তর করুন যেখানে প্রতিটি মানগুলির সংমিশ্রণের জন্য একটি রাষ্ট্র রয়েছে।

  2. আপনি যে নিয়মিত অভিব্যক্তিটি জানেন তা আপনি নির্বিচারে গ্রহণ করতে পারবেন এমন অংশগুলির সন্ধান করুন, যেখানে আপনি জানেন "যদি আমি এটি দেখতে পাই তবে অবশ্যই অবশ্যই আরই এর এই অংশটির সাথে আমার মিল থাকবে।" এগুলির সর্বদা প্রচুর পরিমাণে থাকবে না, তবে এই অংশগুলি সনাক্ত করে এমন অংশগুলি দেখাতে পারে যা ডিএফএ করা সহজ will

  3. এনএফএ-> ডিএফএ-এর জন্য সাবসেট নির্মাণ আসলে কোনও অ্যালগরিদমের জটিল নয়। সুতরাং যদি এটি কোনও পরীক্ষার প্রশ্ন নয়, কোনও অ্যাসাইনমেন্ট হয় তবে কেবলমাত্র একটি বাস্তবায়ন কোড আপ করা দ্রুততর হতে পারে এবং আপনার প্রোগ্রামটি এনএফএকে ডিএফএতে রূপান্তর করতে দিন। আপনি যদি নিজের কোডটি ব্যবহার করেন তবে কোনও প্ল্যাগারিজম সমস্যা হওয়া উচিত নয়।

P=NP=PSPACE

অ্যালগরিদমকে অনেকগুলি পদক্ষেপের প্রয়োজন হবে এমন জায়গায় আপনি যখন নিজের স্বজ্ঞাততা ব্যবহার করতে পারবেন তখন কোণগুলি কাটাতে "চেষ্টা করুন" এর ফলাফলটি পরিষ্কার Try


-2

যদিও এটি সঠিক উপায় নয় তবে বেশিরভাগ সময় এটি কাজ করে।

প্রথম পদক্ষেপ : সর্বাধিকতম স্ট্রিং সন্ধান করুন যা নিয়মিত প্রকাশের মাধ্যমে গ্রহণযোগ্য। দ্বিতীয় পদক্ষেপ : ন্যূনতম স্ট্রিং গ্রহণযোগ্য মেশিনের লেনদেনের সাথে প্রয়োজনীয় রাজ্যগুলি আঁকুন। তৃতীয় পদক্ষেপ : সমস্ত রাজ্যের জন্য বাকী বর্ণমালার লেনদেন আঁকুন।

উদাহরণস্বরূপ: নিয়মিত এক্সপ্রেশন (0 + 1) * 1 "স্ট্রিংটি 1 দিয়ে সমাপ্ত হয়" পদক্ষেপ 1: ছোট স্ট্রিং: 1 পদক্ষেপ 2: দুটি রাষ্ট্র Q0 এবং Q1। Q0 থেকে Q1 তে 1 এর লেনদেন হচ্ছে। এবং Q1 গ্রহণযোগ্য রাষ্ট্র। পদক্ষেপ 3: কিউ 0 স্টেটের কিউ 1 এর জন্য লেনদেন কিউ 1 তে হয়। এখন কিউ 0 তে 0 লেনদেন করুন। কিউ 1 স্টেট কিউ 1 এর জন্য 1 লেনদেন Q1 এ থাকবে। এবং 0 টি লেনদেন Q0 এ যাবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.