8

मुझे सही दिशा में एक सूचक नहीं मिल रहा है, मुझे यह भी यकीन नहीं है कि मुझे कौन से नियमों का शोध करना चाहिए, लेकिन गुगलिंग के अनगिनत घंटे मुझे मंडलियों में कताई कर रहे हैं , इसलिए उम्मीद है कि स्टैक ओवरफ्लो की खुफिया जानकारी के सामूहिक छिद्र मदद कर सकते हैं।मूल्यांकन बूलियन तर्क पेड़ की दिशा में मार्गदर्शन की आवश्यकता है

समस्या यह है कि मुझे डेटा को फ़िल्टर करने का एक तरीका चाहिए जिसे मैं केवल यौगिक तर्क वृक्ष कह सकता हूं। वर्तमान में प्रणाली एक सरल और फ़िल्टरिंग प्रणाली लागू करता है। उदाहरण के लिए, मान लें कि हमारे पास लोगों का डेटासेट है। आप फिल्टर का एक समूह जोड़ते हैं जो सभी लोगों को दिखाता है जहां (लिंग = महिला) और (आयु> 23) और (आयु < 30) और (स्थिति = एकल)। आसान है, प्रत्येक आइटम के माध्यम से पुनरावृत्त, केवल एक वैध आइटम संग्रह में जोड़ें अगर हर शर्त सच है।

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि मैं उपयोगकर्ता को जटिल प्रश्नों को शामिल करने में सक्षम होने के तरीके को कैसे संभाला जा सकता हूं? मैं एक पेड़ की तरह कुछ सोच रहा हूं जहां प्रत्येक नोड प्रतिनिधित्व करता है और अभिव्यक्ति अपने बच्चों को सही या गलत करने का मूल्यांकन करती है। एक सरल उदाहरण होगा - (नीचे लिंग == पुरुष और आयु == 25) या (लिंग == महिला और स्थिति == सिंगल)) और IQ> 120. क्षमा करें मैं एक बेहतर उदाहरण के बारे में नहीं सोच सकता क्षण। लेकिन आप इस प्रकार के अभिव्यक्ति पेड़ का प्रतिनिधित्व करने और इन फ़िल्टरों के खिलाफ संग्रह में वस्तुओं का मूल्यांकन करने के बारे में कैसे जाएंगे। कुछ संदर्भ क्या हैं जो मदद करेंगे? नरक, कुछ ख़राब Google खोज क्या हैं जो सकारात्मक दिशा में ले जा सकते हैं ?!

किसी भी व्यक्ति को धन्यवाद जो कोई सहायता प्रदान कर सकता है। मुझे दिखाओ सभी लोगों को जहां सेक्स पुरुष है और आंखों के रंग हरा होता है या सेक्स महिलाएं हैं, आंखें नीली हैं, या -

यहाँ लोगों की एक डेटासेट का उपयोग करके

  • क्वेरी पेड़ के रूप में एक यौगिक क्वेरी का एक उदाहरण है स्थिति एकल है। माता-पिता के रूप में (लिंग == पुरुष & & आंखें == हरा) || (सेक्स == महिला & & (आंखें == ब्लू || स्थिति == एकल))

तो पेड़ रूप im में सोच रही थी

o-Root Node 
    - And - Sex = Male 
    - And - Eyes = Blue 
    - Or - Sex = Female 
    - And Eyes = Blue 
    - Or Status = Single 

मेरा मानना ​​है कि समाधान में इस तरह के प्रत्येक नोड का प्रतिनिधित्व करने के लिए है जैसे

Node 
{ 
    OpType - AND or OR 
    ExpressionField - The field to evaluate 
    ExpressionOp - =, !=, >, >=, <, <= 
    ExpressionValue - the value to compare the field's value against 

    Function Evaluate() - returns a bool 
} 
किसी दिए गए नोड के लिए

तो एक डेटा संरचना, chilren का मूल्यांकन, यदि आप एक और नोड कर रहे हैं, तो सच वापसी अगर सच में अपनी अभिव्यक्ति परिणाम और अपने सभी बच्चों और सच या किसी का मूल्यांकन या बच्चा सच्चाई का मूल्यांकन करता है और फिर से काम करता है।

हर वैचारिक स्थिति को पूरा करने के लिए लगता है जिसे मैं फेंक सकता हूं, लेकिन जब से मैं इसे लागू करता हूं तब से हम इसे तब तक करेंगे। मैं बाद में असली कोड पोस्ट करूंगा जब इसकी कामकाजी और चित्र दूसरों के लिए इस समस्या का बेहतर वर्णन करने में मदद करें।

+0

सुझाव दें कि आप स्पष्ट करते हैं कि आपका डेटा किस प्रकार है: SQL डीबी? मुझे लगता है कि "as3" टैग एक्शनस्क्रिप्ट 3 को संदर्भित करता है: यदि हां, तो क्या आप वास्तव में सी # या एएस 3 विशिष्ट तकनीकों की तलाश में हैं, या सिर्फ "सिद्धांत" के लिए? – BillW

+0

डेटा स्मृति में है, हालांकि तकनीकी रूप से कार्यान्वयन फ्लैश और चांदी की रोशनी दोनों में है, लेकिन मैं एक विशिष्ट कार्यान्वयन की तुलना में सामान्य समाधान को समझने में बहुत अधिक रुचि रखता हूं। समस्या के क्रूक्स में उपयोगकर्ता को यूआई प्रस्तुत करना शामिल है जो उन्हें डेटासेट को फ़िल्टर करने के लिए गतिशील रूप से जटिल क्वेरी बनाने की अनुमति देता है। मुझे क्वेरी का प्रतिनिधित्व करने के लिए एक ठोस डेटा संरचना की आवश्यकता है। प्रकार - - अब तक मैं के लिए एक नोड निम्नलिखित है और या या - फील्ड - ऑपरेशन -! - डाटासेट इस नोड लक्षित कर रहा है के क्षेत्र =, =,>, < <=, > = - मान - मूल्य – JTtheGeek

+0

के खिलाफ ऑपरेशन लागू करने के लिए स्पष्ट स्पष्टीकरण! मेरा सुझाव है कि आप स्पष्ट करते हैं कि डेटा संरचना सी #/सिल्वरलाइट में है: यदि ऐसा है, तो मुझे लगता है कि आप "भारी उठाने" के लिए लिंक का उपयोग करेंगे। यदि आप पहले से ही लिंक के साथ उच्च स्तर पर हैं, लैम्बडा, अज्ञात विधियों इत्यादि का उपयोग करते हुए, यह एक बात है: यदि आप नहीं हैं, तो आप लिंक अध्ययन संसाधनों पर एसओ (यदि आप इसके लिए पूछते हैं) पर अच्छी सलाह ले सकते हैं (इमो जोन स्कीट की "सी # गहराई" लिंक पर शानदार सी # पुस्तक है जो लिंक के शानदार कवरेज के साथ है)। यह आपके विचार के लिए अप्रासंगिक हो सकता है, लेकिन आप कुंजी के रूप में "जो भी" कुंजी और निष्पादन योग्य (अनाम) विधियों के साथ एक शब्दकोश का उपयोग कर सकते हैं। - बिलडब्ल्यू – BillW

उत्तर

1

अभिव्यक्ति का आपका विश्लेषण ((लिंग == पुरुष और आयु == 25) या (लिंग == महिला और स्थिति == सिंगल)) और IQ> 120 अजीब दिखता है। मैं के रूप में यह पार्स होगा:

* And 
    * Or 
     * And 
      * == 
       * Sex 
       * Male 
      * == 
       * Eyes 
       * Blue 
     * And 
      * == 
       * Sex 
       * Female 
      * == 
       * Status 
       * Single 
    * > 
     * IQ 
     * 120 

पेड़ प्रकार होगा:

Node 
{ 
    bool evaluate() 
} 

AndNode : Node 
{ 
    Node left 
    Node right 

    bool evaluate() 
    { 
     return left.evaluate() && right.evaluate() 
    } 
} 

// OrNode is similar 

EqualsNode : Node 
{ 
    Field field 
    Value value 

    bool evaluate() 
    { 
     return field.value() == value 
    } 
} 

// Likewise for <, >, etc 
+0

मुझे लगता है कि आप क्या कर रहे हैं, लेकिन मुझे लगता है कि आंतरिक अभिव्यक्ति (मूल्य - ओप - फ़ील्ड जैसे कि आईक्यू> 120) हमेशा एक साधारण बूल पर मूल्यांकन किया जा सकता है, इसलिए इसे नोड्स के अंदर बूल के गुच्छा के साथ समाप्त करना उस नोड्स अभिव्यक्ति के परिणाम का प्रतिनिधित्व करने के लिए, और नोड्स पर एंड एंड ऑर का एक गुच्छा दर्शाता है कि कैसे बूल परिणाम पेड़ में अवशोषित हो जाता है। अभी के रूप में सही के रूप में चिह्नित, मेरा मानना ​​है कि यह सबसे अच्छा जवाब है। – JTtheGeek

+0

यकीन नहीं है कि मैं समझता हूं। कड़ाई से मूल्यांकन() को कुछ प्रकार की संदर्भ वस्तु (शायद तालिका की एक पंक्ति) के तर्क के रूप में लेना चाहिए, जो फ़ील्ड के लिए एक मूल्य उत्पन्न करेगा (जो प्रत्येक पंक्ति के लिए अलग हो सकता है)। –

0

मुझे कहना है कि यही कारण है कि डेटाबेस इंजन बनाए गए हैं। आप सेट लॉजिक के साथ जो कुछ भी चाहते हैं वह कर सकते हैं और आप जिस नतीजे की तलाश कर रहे हैं उस पर भी पहुंच सकते हैं, लेकिन ये डेटाबेस और एसक्यूएल द्वारा हल की गई मानक समस्याएं हैं। आप एक कोड समाधान के लिए linq भी देख सकते हैं।

+0

मुझे लगता है कि उसका मतलब है कि वह इस अभिव्यक्ति को एसक्यूएल के भीतर गतिशील रूप से कैसे बना सकता है। – user29964

+0

हां, यह उपयोगकर्ता को एक ठोस यूआई पेश करने के बारे में है जो उन्हें आसानी से एक प्रश्न बनाने की अनुमति देता है। मुझे लगता है कि मैंने इसे काफी सरल वृक्ष संरचना और कुछ सरल पुनरावर्ती कार्यों के साथ समझ लिया है, मुझे पता है कि दूसरों ने इस समस्या का अध्ययन किया है और अपने विचारों और प्रयोगों को सीखना चाहते हैं, लेकिन अभी तक यह पता नहीं लगा है कि कैसे अन्य शामिल हैं। इसके अलावा, इस मामले में सभी डेटा स्मृति में है। – JTtheGeek

+0

एक विकल्प मानदंडों का सेट लेना होगा और उपयोगकर्ता को सेट और मानदंड बनाने और सेट स्टोर करने की अनुमति देगा। तो सेट 1 महिला IQ> 120 फिर उपयोगकर्ताओं को ऑर के लिए एकाधिक सेट निर्दिष्ट करने की अनुमति देगा। यह ग्राफिक्स को एक दिलचस्प फैशन में किया जा सकता है जो उपयोगकर्ताओं को सेट खींचने और छोड़ने की इजाजत देता है। शायद आप एक चौराहे या सेट में शामिल होने के लिए सेट के अंदर सेट रख सकते हैं। बस एक विचार क्षमा करें मुझे आपके प्रश्न का क्रूक्स नहीं मिला था। – rerun

0

लगता है जैसे आपको एक उपयोगकर्ता इंटरफ़ेस बनाने की आवश्यकता है जो एक साधारण पार्स पेड़ के निर्माण की अनुमति देता है। जब प्रेस जाओ तो आप पेड़ पर चल सकते हैं और उस उपयोगकर्ता इंटरफ़ेस संरचना से LINQ अभिव्यक्ति वृक्ष बना सकते हैं। LINQ क्वेरी निष्पादित करें और फिर आवश्यकतानुसार परिणामों को संसाधित करें। इसलिए मैं आपको LINQ अभिव्यक्ति पेड़ पर पढ़ने की सलाह दूंगा।

1

प्रश्नों के इन प्रकार अक्सर AND एड खंड के एक OR एड सरणी के रूप में प्रस्तुत कर रहे हैं। यही है, एक सारणीबद्ध प्रारूप जिसमें आप कई स्थितियों में AND एड एक साथ पढ़ते हैं, और फिर उन्हें OR पर पढ़ें। इससे परिस्थितियों में कुछ पुनरावृत्ति होती है, लेकिन उपयोगकर्ताओं को पढ़ने, लिखने और समझने में आसान होता है। आपका नमूना ((Sex == Male AND Age == 25) OR (Sex == Female AND Status == Single)) AND IQ > 120 देखने

तरह
Sex == Male & Age == 25  & IQ > 120 
Sex == Female & Status == Single & IQ > 120 
1

आप इस तरह के 'विधेय कलन' और 'संयोजक सामान्य रूप' के रूप में विषयों के लिए Google करना चाह सकते हैं होगा।

संबंधित मुद्दे