2009-07-26 12 views
5

क्या यह निर्धारित करने के लिए गणित में कोई तरीका है कि सूची में सभी पूर्णांक सेट संख्या से कम हैं या नहीं। उदाहरण के लिए यदि मैं जानना चाहता हूं कि सूची में सभी संख्या 10:गणित: निर्धारित करें कि सूची में सभी पूर्णांक संख्या से कम हैं या नहीं?

theList = {1, 2, 3, 10}; 
magicFunction[theList, 10]; --> returns False 

आपकी सहायता के लिए धन्यवाद।

उत्तर

7

सूचियों के लिए Max function पर देखें, जो सूची में सबसे बड़ी संख्या देता है। वहां से, आप यह जांच सकते हैं कि यह मान किसी निश्चित संख्या से कम है या नहीं।

+0

धन्यवाद, अच्छा विचार। – Nope

+0

बस इसे बाहर निकालने के लिए: 'जादू समारोह [lst_, val_]: = अधिकतम [lst] dreeves

3

परीक्षण इस तरह की 'गुना' का उपयोग कर निर्माण करने के लिए आसान है:

magicFunction[ lst_, val_ ] := 
Fold[ ((#2 < val) && #1) &, True, lst ] 

वाक्यांश '(# 2 < वैल)' प्रत्येक सूची तत्व की कसौटी पर है ('# 2')। आप यहां जो भी टेस्ट चाहते थे उसे डाल सकते हैं, ताकि आप मैक्स जैसे एक सूचीबद्ध कार्य के साथ अधिक शक्तिशाली परीक्षण कर सकें।

'& & # 1' फिर सभी मौजूदा तत्वों के परिणामस्वरूप आपके वर्तमान तत्व के परिणाम को जोड़ता है।

और 'ट्रू' मूल मामला है - एक खाली सूची का परिणाम।

यह कैसे काम करता देखने के लिए, आप कुछ अपरिभाषित मूल्यों में पारित और देखते हैं कि अभिव्यक्ति के लिए विस्तारित कर सकते हैं: पेशकश मेरी समाधान मुझे पिछले दो समाधान टिप्पणी करते हैं इससे पहले कि

In[10]:= magicFunction[ {a, b, c}, 10 ] 

Out[10]= c < 10 && b < 10 && a < 10 
6

। आइए जॉय रॉबर्ट के समाधान जादू को कॉल करें फंक्शन 1 और एरिक का समाधान जादू समारोह 2।

magicFunction1 बहुत छोटा और सुरुचिपूर्ण है। मुझे इसके बारे में क्या पसंद नहीं है कि अगर मेरे पास संख्याओं की एक बड़ी सूची है और पहला व्यक्ति 10 से बड़ा है तो यह अब भी सबसे बड़ी संख्या को समझने के सभी काम करेगा जो आवश्यक नहीं है। एक बेंचमार्क मैं

In[1]:= data = Table[RandomInteger[{1, 10}], {10000000}]; 

In[2]:= Timing[magicFunction1[data, 10]] 
Out[2]= {0.017551, False} 

In[2]:= Timing[magicFunction2[data, 10]] 
Out[2]= {10.0173, False} 

In[2]:= Timing[magicFunction3[data, 10]] 
Out[2]= {7.10192, False} 

In[2]:= Timing[magicFunction4[data, 10]] 
Out[2]= {0.402562, False} 

तो मेरी सर्वश्रेष्ठ उत्तर magicFunction4 है पाया कर

magicFunction3[lst_, val_] := 
Position[# < val & /@ lst, False, 1, 1] == {} 

और

magicFunction4[lst_, val_] := 
Cases[lst, x_ /; x >= val, 1, 1] == {} 

,: यह भी magicFunction2

पर लागू होता है मैं निम्न दो समाधान विकसित लेकिन मुझे अभी भी पता नहीं है कि यह जादू की तुलना में धीमी क्यों है। मैं यह भी अनदेखा करता हूं कि MagicFunction3 और MagicFunction4 के बीच इतना बड़ा प्रदर्शन अंतर क्यों है।

+1

मैक्स का समय और आपका जादू फ़ंक्शन 4 मैक्स के निर्माण के कारण हो सकता है .... मुझे सच में यकीन नहीं है कि – Nope

+1

वास्तव में मापने के लिए अतिरिक्त प्लस – nes1983

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

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