"ছোট" মেশিনগুলি কি নিয়মিত অভিব্যক্তির সাথে দক্ষতার সাথে মেলে?


30

এটি সুপরিচিত যে একটি নিয়মিত প্রকাশটি নিয়মিত প্রকাশের সমানুপাতিক আকারের একটি ননডেস্টেরিনিস্টিক সসীম অটোমেটনের দ্বারা স্বীকৃত হতে পারে, বা কোনও সংযোজনমূলক এফএ দ্বারা সম্ভবত সম্ভাব্য তাত্পর্যপূর্ণভাবে বৃহত্তর। তদ্ব্যতীত, প্রদত্ত একটি স্ট্রিং এবং একটি রেগুলার এক্সপ্রেশন , NFA সমানুপাতিক সময় সদস্যপদ পরীক্ষা করতে পারেন | s | | r | , এবং ডিএফএ | এর সাথে আনুপাতিক সময়ে সদস্যতা পরীক্ষা করতে পারে s |sr|s||r||s|। এনএফএর জন্য মন্দা এই বিষয়টি থেকে উদ্ভূত হয় যে অটোমেটনের মধ্যে থাকা সম্ভব রাষ্ট্রগুলির সেটগুলি অবশ্যই আমাদের অনুসরণ করতে হবে এবং ডিএফএর জন্য তাত্পর্যপূর্ণভাবে আঘাত হানে যে এর রাজ্যগুলি রাষ্ট্রের ক্ষমতার উপাদান। NFA।

এটা দক্ষতার কি সম্ভব (অর্থাত, সময় ভাল চেয়ে , এবং স্থান চেয়ে হে ( 2 | R | ) ) নিয়মিত এক্সপ্রেশন চিনতে, যদি আমরা সসীম অটোমাটা চেয়ে অধিক শক্তিশালী মেশিন ব্যবহার করার অনুমতি দেয়? (উদাহরণস্বরূপ, পুশডাউন অটোমেটা, বা কাউন্টার মেশিনগুলির সাহায্যে নিয়মিত ভাষাগুলি স্বীকৃতি দেওয়ার ক্ষেত্রে কি সংক্ষিপ্ততা লাভ আছে?)O(|r||s|)O(2|r|)


2
আপনি যখন বলছেন যে "এনএফএ সময় অনুসারে " এর সাথে আনুপাতিকভাবে সদস্যতা পরীক্ষা করতে পারে আপনি কী বোঝাতে চেয়েছেন যে একটি (ডিস্ট্রিমেন্টিক) র‌্যাম মেশিন যা এনএফএকে সুস্পষ্ট উপায়ে অনুকরণ করে এত বেশি সময় নেয়? বা "এনএফএ-র রান টাইম" সংজ্ঞায়নের জন্য অন্য কোনও উপায় আছে যা অন্য একটি কম্পিউটারের মডেলকে উল্লেখ করে না? (এছাড়াও যুক্তিসম্মত কিন্তু খুব দরকারী নয় সংজ্ঞা যে বলছেন যে স্ট্রিং এর জন্য কোনো NFA এর রানটাইম থেকে গুলি হয় | গুলি | ।)|s||r|s|s|
Radu GRIGore

হ্যাঁ, এটিই আমার প্রশ্নের সঠিক ব্যাখ্যা।
নীল কৃষ্ণস্বামী

2
তারপর এটি আমার মনে হচ্ছে আরও স্বাভাবিক কেবল এই জিজ্ঞেস করা উচিত: একটা অ্যালগরিদম (ক র্যাম মেশিনে) যদি একটি স্ট্রিং, যাতে সিদ্ধান্ত নেয় রেগুলার এক্সপ্রেশন দ্বারা সংজ্ঞায়িত ভাষায় হয় যে কাজ ( | গুলি || R | ) সময় এবং o ( 2 | r | ) স্থান? (বিশেষত যদি আপনি sro(|s||r|)o(2|r|)
কোনও রেশ

1
সমস্যাটা ঠিক বুঝতে পারছি না। ইনপুটটি কি একটি স্ট্রিং গুলি এবং একটি নিয়মিত এক্সপ্রেশন আর, এবং সমস্যা নিয়মিত এক্সপ্রেশন আর দ্বারা সংজ্ঞায়িত ভাষায় আছে কিনা তা সিদ্ধান্ত নিতে?
রবিন কোঠারি

@ রবিন: হ্যাঁ, এটিই আমি জানতে চাই যে আপনি আরও বেশি গণনামূলক শক্তি ব্যবহার করে সীমাবদ্ধ অটোমাতার চেয়ে নিয়মিত এক্সপ্রেশনগুলি আরও দক্ষতার সাথে মেলে কিনা বা অতিরিক্ত বৈশিষ্ট্যগুলি (যেমন স্ট্যাক, র‌্যাম) কেবল সহায়তা করে না।
নীল কৃষ্ণস্বামী

উত্তর:


20

স্থান হিসাবে সময়ের বাইরে বাণিজ্য করা যথেষ্ট সহজ enough

নিয়মিত ভাবটি একটি এনএফএ-তে রূপান্তর করুন - অ্যালগরিদমের সাথে তুলনা করার ক্ষেত্রে একত্রীকরণের জন্য, আমরা ধরে নেব যে এনএফএ রাজ্যের সংখ্যা, যাতে আপনার ( আর গুলি ) সরাসরি এনএফএ অনুকরণের জন্য আবদ্ধ সময় বৈধ এবং আপনার হে ( 2 আর) ) রূপান্তরিত ডিএফএ চালানোর জন্য আবদ্ধ স্থানটিও বৈধ হয় যখনই আপনি এমন কোনও র‌্যামে কাজ করেন যা সেই পরিমাণ স্মৃতিকে সম্বোধন করতে পারে।rO(rs)O(2r)

এখন, মধ্যে NFA (ইচ্ছামত) রাজ্যের পার্টিশন সাব-সেট নির্বাচন S আমি সর্বাধিক এর R / যুক্তরাষ্ট্রের প্রতিটি। মধ্যে প্রতিটি উপসেট S আমি , আমরা করতে পারেন সূচক সাব-সেট নির্বাচন একটি আমি এর এস আমি থেকে সংখ্যা দ্বারা 0 থেকে 2 R / - 1kSir/kSiAiSi02r/k1

একটি টেবিল তৈরি করুন যেখানে আমি এবং 0 থেকে সীমার মধ্যে হয় k - 1 , একটি ইনপুট প্রতীক, এবং একটি আমি (এর সংখ্যাসূচক INDEX) এর একটি উপসেট এস আমি । টেবিল সঞ্চিত মান (সংখ্যাগত INDEX) এর একটি উপসেট এস : একটি রাষ্ট্র Y হয় টি [ আমি , , , একটি আমি ] যদি এবং কেবল যদিT[i,j,c,Ai]ijk1cAiSiSjyT[i,j,c,Ai]y belongs to Sj and there is a state in Ai that transitions to y on input symbol c.

NFA সিমুলেট করার জন্য, বজায় রাখা সূচকের, প্রতিটি জন্য এক S আমি , উপসেট উল্লেখ একজন আমি মধ্যে রাজ্যের এস আমি যে ইনপুট কিছু উপসর্গ দ্বারা পৌঁছে যেতে পারে। প্রতিটি ইনপুট প্রতীকের জন্য , টেবিল ব্যবহার সন্ধান করার, প্রতিটি জোড়া জন্য আমি , , এ রাজ্যের সেট এস যে একটি রাষ্ট্র থেকে পৌঁছে যাবে একটি উপর রূপান্তরগুলি দ্বারা , এবং তারপর একটি bitwise বাইনারি ব্যবহার করুন অথবা এস জে রাজ্যের একক উপসেটে তাদের একত্রিত করার জন্য এই সেটগুলির রাজ্যের সংখ্যাগত সূচকগুলিতে ক্রিয়াকলাপkSiAiSici,jSjAicSj। সুতরাং, সিমুলেশনের প্রতিটি ধাপে সময় লাগে , এবং সিমুলেশনের মোট সময় হল ( এস কে 2 )O(k2)O(sk2)

প্রয়োজনীয় স্থানটি সমস্ত টেবিলের জন্য স্থান, যা । সময় এবং স্থান বিশ্লেষণ যে কোনও র‌্যামের ক্ষেত্রে কার্যকর যা সেই পরিমাণ মেমরিকে সম্বোধন করতে পারে এবং এটি সেই শব্দগুলিতে বাইনারি অপারেশন করতে পারে যা যথেষ্ট পরিমাণে স্মৃতিকে সম্বোধন করতে পারে।O(k22r/k)

আপনি যে সময়-স্থানের ট্রেড অফটি পান এটি এনএফএ সিমুলেশনের সাথে পুরোপুরি মেলে না, কারণ উপর চতুর্ভুজ নির্ভরতা । কিন্তু তারপর, আমি সন্দিহান যে আছি হে ( গুলি ) কিভাবে আপনি (সম্ভবত quadratically অনেক) ট্রানজিশন বর্তমানে থেকে অনুমতি দেওয়া সব দিকে তাকিয়ে তুলনায় দ্রুততর NFA একটি একক পদক্ষেপ ভান না: সঠিক সময় NFA সিমুলেশন জন্য আবদ্ধ হয় সক্রিয় রাষ্ট্র অন্য রাজ্যে? এটি ( আর 2 এস ) হওয়া উচিত নয় ?kO(rs)O(r2s)

যে কোনও ক্ষেত্রে পরিবর্তিত হয়ে ডিএফএর চেয়ে কম স্থানের সাথে ডিএফএ এবং এনএফএ সীমানার মধ্যে একটি ধারাবাহিকতায় সময়সীমা পেতে পারেন।k


I think your correction is correct, and your answer does answer my asked question. However, the question I wanted to ask is how much additional computational power helps. (Eg, with a counter you can match a string ak in O(1) space.) If you don't mind, I'll leave the question open for a little while longer to see if anyone knows the answer to that....
Neel Krishnaswami

@Neel: If David's solution is the best a RAM machine can do, then stacks, counters, etc. won't help. (But, of course, he only gave upper bounds, not lower bounds.)
Radu GRIGore

1
As far as I can tell, my solution does use "additional power": it is based on table lookups and integer indices, something that is not available in the DFA or NFA models. So I don't really understand how it's not answering that part of the question.
David Eppstein

Here is an alternative way to parametrize this. Suppose we are on a RAM machine with word width w, where wlgr. Then the NFA simulation takes O(sr2) time and O(r/w) space. The DFA simulation isn't possible if rw (not enough space available). The construction in this answer sets kr/w and takes O(sr2/w2) time and uses all the space available (i.e., something in the vicinity of 2w space). It is basically exploiting the bit-parallelism available in a RAM machine to do the NFA simulation faster.
D.W.

4

This is not an answer, but too long for a comment. I'm trying to explain why the question, as posed, may be hard to understand.

There are two ways to define computational complexity for a device X.

The first and most natural way is intrinsic. One needs to say how the device X uses the input, so that we may later look at how the size n of the input affects the run time of the device. One also needs to say what counts as an operation (or step). Then we simply let the device run on the input and count operations.

The second is extrinsic. We define computational complexity for another device Y and then we program Y to act as a simulator for X. Since there may be multiple ways for Y to simulate X, we need to add that we are supposed to use the best one. Let me say the same with other words: We say that X takes O(f(n)) time on an input of size n if there exists a simulator of X implemented on machine Y that takes f(n) time.

For example, an intrinsic definition for NFA says that it takes n steps to process a string of length n; an extrinsic definition that uses a RAM machine as device Y says that the best known upper bound is probably what David Eppstein answered. (Otherwise it would be strange that (1) the best practical implementation pointed in the other answer does not use the better alternative and (2) no one here indicated a better alternative.) Note also that strictly speaking your device X is the regular expression, but since the NFA has the same size it is safe to take it as being the device X you are looking at.

Now, when you use the second kind of definition it makes little sense to ask how restricting the features of device X affects the running time. It does however make sense to ask how restricting the features of device Y affects the running time. Obviously, allowing more powerful machines Y might allow us to simulate X faster. So, if we assume one of the most powerful machines that could be implemented (this rules out nondeterministic machines, for example) and come up with a lower bound Ω(f(n)), then we know that no less powerful machine could do better.

So, in a sense, the best answer you could hope for is a proof in something like the cell probe model that simulating an NFA needs a certain amount of time. (Note that if you take into account the conversion NFA to DFA you need time to write down the big DFA, so memory isn't the only issue there.)


4

এমনকি যদি আপনি বিশ্বাস করেন যে নিয়মিত এক্সপ্রেশন ম্যাচিংয়ের বিষয়ে শেখার জন্য নতুন বা পুরানো কিছুই নেই, তবে দীর্ঘ সময় ধরে আমি যে সর্বাধিক সুন্দর কাগজপত্র পেয়েছি তার মধ্যে একটি পরীক্ষা করে দেখুন: এস ফিশার, এফ হুচ এবং টি দ্বারা নিয়মিত প্রকাশের উপর একটি নাটক উইলকে, আইসিএফপি ২০১০।

(এমএমটি চক্রবর্তী এই কাগজটি সুপারিশ করার কৃতিত্বের দাবিদার।)

সম্পাদনা: এই কাগজটি প্রাসঙ্গিক হওয়ার কারণ হ'ল এটি একটি নতুন কৌশল (60 এর দশকের গ্লুশকভের উপর ভিত্তি করে) বর্ণনা করে যা সম্পূর্ণ এনএফএ (ডিএফএকে একা ছেড়ে দাও) এর সাথে সম্পর্কিত নয়। পরিবর্তে যা করা হয় তা আরই এর সিনট্যাক্স ট্রিতে এনএফএ দ্বারা কোনও শব্দের গ্রহণযোগ্যতার সিদ্ধান্ত নেওয়ার জন্য সুপরিচিত একটির মতো চিহ্নিত আলগোরিদম চালানোর অনুরূপ। পারফরম্যান্স পরিমাপের পরামর্শ দেয় এটি গুগলের সাম্প্রতিক প্রকাশিত পুনরায় লাইব্রেরির সাথেও প্রতিযোগিতামূলক।


A nice paper to read!!
Hsien-Chih Chang 張顯之

1

Take a look at this article by Russ Cox. It describes an NFA-based approach, first employed by Ken Thompson, by which an input string s can be matched to a regular expression r in time O(|s|.c) and space O(|r|.d), where c and d are upper-bound constants. The article also details a C implementation of the technique.


2
I'm not convinced that's an accurate description of the article. It appears to be building the DFA from the NFA on an as-needed basis and caching the results. But the cache size could be exponential in r.
David Eppstein
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.