में एक नोडेटर्मिनिस्टिक परिमित ऑटोमाटा डिज़ाइन करें, मैं इस post में समझाता हूं, जैसा कि मैं एक nondeterministic परिमित automaton अनुकरण करने के लिए एक असाइनमेंट कर रहा हूं।सी ++ (गलत आउटपुट)
1
6 8 0 2
2
5
0 0 a
0 1 a
1 1 b
1 2 c
1 3 c
3 4 d
4 4 d
4 5 d
5
aaabcccc
aabbbbcdc
abbcdddcc
acdddddd
abc
इनपुट की पहली पंक्ति एक पूर्णांक टी, कार्यक्रम का मूल्यांकन करने के मामलों की संख्या का प्रतिनिधित्व किया है: मैं इस इनपुट फ़ाइल tarea4.in
से पढ़ा है। प्रत्येक परीक्षण केस 4 पूर्णांक के साथ शुरू होता है, पहला automaton के लिए राज्य की संख्या है, अगला automaton की संक्रमण की संख्या है, तीसरा नंबर प्रारंभिक स्थिति है, और फिर अंतिम राज्यों की संख्या है। फिर अंतिम राज्य आते हैं (उदाहरण में अंतिम राज्य 2 और 5 हैं)। फिर एफ लाइनें, प्रत्येक एक पूर्णांक ई के साथ, ई का प्रतिनिधित्व एक अंतिम राज्य है।
फिर एन लाइनें (एन संक्रमण की संख्या है), प्रत्येक 2 पूर्णांक और एक चरित्र, आई, जे और सी के साथ, उन राज्यों का प्रतिनिधित्व करते हैं जहां संक्रमण, यानी, संक्रमण राज्य से जाता है, मैं जे को राज्य करता हूं चरित्र सी। इस पंक्ति के बाद एक पूर्णांक एस के साथ आते हैं, जिसमें परीक्षण करने के लिए स्ट्रिंग की संख्या होगी, फिर संबंधित तारों के साथ एस लाइनें होंगी।
उम्मीद उत्पादन होता है:
Test Case #2:
aaabcccc Rejected
aabbbbcdc Rejected
abbcdddcc Rejected
acdddddd Accepted
abc Accepted
उत्पादन मेरी कोड में जिसके परिणामस्वरूप:
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <utility>
#include <vector>
using namespace std;
typedef map<pair<int, int>, char> transitions;
transitions trans;
int numberFinals;
vector<int> currentStates;
int main(){
freopen ("tarea4.in", "r", stdin);
//freopen ("tarea4.out", "w", stdout);
int testCases, i, j,k, cont=1,finalStates,numberInputs,stateOrigin, stateDestination;
int numberStates, numberTransitions, initialState;
char transitionCharacter ;
set<int> current;
set<int> next;
set<int>::iterator it;
set <int> final;
std::set<int> the_intersection; // Destination of intersect
map<pair<int, int>, char>::iterator p;
string inputString;
cin>> testCases;
for (i=0;i< testCases;i++){
cin>>numberStates>>numberTransitions>>initialState>>numberFinals;
current.insert (initialState);
for (j=0;j<numberFinals;j++){
cin>>finalStates;
final.insert(finalStates);
}
for (j=0; j<numberTransitions;j++){
cin>> stateOrigin>>stateDestination>>transitionCharacter;
trans.insert(transitions::value_type(std::make_pair(stateOrigin, stateDestination), transitionCharacter));
}
cin>>numberInputs;
cout<<"Test Case #"<<cont++<<":"<<endl;
for (j=0; j<numberInputs;j++){
//////////////////the code of the answer /////////////////
current.insert (initialState);
cin>> inputString;
cout<<inputString<<" ";
for (k=0; k<str.size();k++){
next.clear();
for (it=current.begin() ; it != current.end(); it++){
for (q= trans.begin(); q!= trans.end();q++){
if((*it == q->first.first)&&(str[k]==q->second)){
next.insert(q->first.second);
}
current=next;
}
}
}
std::set_intersection(current.begin(), current.end(), final.begin(), final.end(), std::inserter(the_intersection, the_intersection.end()));
if (the_intersection.size()>0){
cout<< "Accepted"<<endl;
}
else{
cout<< "Rejected"<<endl;
}
}
printf ("\n");
}
return 0;
}
मेरा प्रश्न है:: क्यों मैं गलत मिलता है
Test Case #1:
aaabcccc Rejected
aabbbbcdc Rejected
abbcdddcc Rejected
acdddddd Rejected
abc Rejected
यहाँ मेरी कोड है उत्पादन? मुझे लगता है कि यह टेस्ट केस में परिभाषित automaton के nondeterminism के लिए है, लेकिन मैं स्ट्रिंग का सही ढंग से मूल्यांकन कैसे कर सकता हूं? मैं evaluate_string
नामक अपने फ़ंक्शन को कैसे बदल सकता हूं, किसी भी तरह से अलग-अलग पथों की जांच करें जो स्ट्रिंग का मूल्यांकन गैर-निर्धारणा द्वारा स्ट्रिंग का मूल्यांकन करने के लिए कर सकते हैं?
मैं कई दिनों से इसके साथ अटक गया हूं और ईमानदार होने के लिए मैं कुछ हद तक हताश हूं।
कृपया अगली बार अपने कोड को सही तरीके से प्रारूपित करें। आपके इंडेंटेशन बंद थे। इसके अलावा, मैं अपेक्षित आउटपुट को समझ नहीं पा रहा हूं। उदाहरण के लिए, '0 बी 3' कहां से आ रहा है? अंत में, आप क्या चाहते हैं? एक एनएफए या डीएफए? आपकी पोस्ट में कुछ भी एक निर्धारक automaton (न तो इनपुट और न ही अपेक्षित आउटपुट) है, इसलिए मैंने अब "डीएफए" के उल्लेखों को हटा दिया है ... –
'0 बी 3 कहां से आ रहा है?': इनपुट के लिए aabbbbcdc के संक्रमण automaton हैं: '(Q0, एक) = 0, (Q0, एक) = 0, (Q0, ख) = 3, (Q3, ख) = 0, (Q0, ख) = 3, (क्यू 3, बी) = 0' 'आप क्या चाहते हैं?'; मेरा फ़ंक्शन "मूल्यांकन_स्ट्रिंग" एक डीएफए लागू करता है और मैं यह जानना चाहता हूं कि एनएफए – novaKid
प्राप्त करने के लिए इसे कैसे संशोधित किया जाए, मेरा मतलब यह नहीं है। '0 बी 3' संक्रमण समारोह से है, पर विचार करने के लिए कोई इनपुट नहीं है। - आपके प्रश्न के बारे में: आह, समझ गया। बुरी खबर यह है कि: आप एक एनएफए को डीएफए में बदल सकते हैं और इसे हल कर सकते हैं, लेकिन आप उस से समान राज्य संक्रमण आउटपुट नहीं प्राप्त कर सकते हैं क्योंकि आपके राज्य के नाम * अलग-अलग होंगे। साथ ही, सीधे एनएफए को चलाने से पहले इसे डीएफए में बदलने से कहीं अधिक आसान (10 लाइन भी नहीं!) है। –