मनोविज्ञान प्रयोगों अक्सर आप की आवश्यकता छद्म randomize करने के लिए परीक्षण आदेश, ताकि परीक्षणों जाहिरा तौर पर यादृच्छिक हैं, लेकिन आप भी इसी तरह के कई परीक्षणों लगातार नहीं मिलता है (जो एक विशुद्ध रूप से यादृच्छिक साथ भी हो सकता है आदेश)।एल्गोरिथ्म छंटाई बराबर मान रखने के लिए अलग
मान लीजिए कि प्रत्येक परीक्षण पर दृश्य प्रदर्शन एक रंग और एक आकार की है कि दो:
display_list = []
colours = {0: 'red', 1: 'blue', 2: 'green', 3: 'yellow'}
sizes = [1] * 20 + [2] * 20 + [3] * 20 + [4] * 20 + [5] * 20 + [6] * 20
for i in range(120):
display_list.append({'colour': colours[i % 4], 'size': sizes[i]})
print(display_list)
और हम या तो संपत्ति इस समारोह का उपयोग कर के लिए समान मान है कि लगातार परीक्षणों की अधिकतम संख्या देख सकते हैं:
def consecutive_properties(seq, field):
longest_run = 0
prev_value = None
current_run = 0
for d in seq:
if d[field] == prev_value:
current_run += 1
else:
current_run = 1
if current_run > longest_run:
longest_run = current_run
prev_value = d[field]
return longest_run
आउटपुट:
>>> print("Consecutive colours: ", consecutive_properties(display_list, 'colour')
('Consecutive colours: ', 1)
>>> print("Consecutive sizes: ", consecutive_properties(display_list, 'size'))
('Consecutive sizes: ', 20)
वहाँ किसी भी एल्गोरिदम हैं आप जानते हैं कि या तो दोनों या दोनों गुणों के लगातार रन को कम करने की अनुमति होगी, या कम से कम इन रनों को निर्दिष्ट लंबाई से नीचे रखें? यदि उत्तरार्द्ध, चलो एक ही रंग या आकार की पंक्ति में 4 से अधिक नहीं कहें।
मैं क्या कोशिश की है:
समाधान मैं अब मूल रूप से एक से थोड़ा बुद्धिमान bogosort, जो बुरी तरह अक्षम हो गया है है। मूल रूप से:
- आप गुण के सभी क्रमपरिवर्तन युक्त टुकड़ों में पूरी सूची को तोड़ने: यदि आप लंबाई 24 के टुकड़ों में
display_list
टूट, प्रत्येक टुकड़ा प्रत्येक रंग प्रत्येक आकार के साथ रखा गया है। मान लेते हैं कि परीक्षण सूची हमेशा इन क्रमचय टुकड़ों में विभाजित किया जा सकता है, क्योंकि आप जानते हैं कि क्रमपरिवर्तन प्रयोग के डिजाइन से हैं करते हैं। - आप अधिकतम रन लंबाई प्रति चंक
- चुनते हैं जब तक कि प्रत्येक खंड के लिए रन लम्बाई अधिकतम मूल्य से कम न हो जाए (वास्तव में इसका मतलब है कि समग्र परीक्षण सूची में, आपके रन लंबाई की दोगुनी हो सकती हैं, क्योंकि आप एक खंड के अंत में और अगले की शुरुआत में इस लंबाई का एक रन चला सकते हैं)
एक संपत्ति के लिए, 1) संपत्ति द्वारा क्रमबद्ध करें 2) समान मूल्यों के भीतर, शफल (सभी लाल रंगों को घुमाएं, सभी चिल्लाना, आदि को घुमाएं) 3) (थोड़ा यादृच्छिक रूप से?) वैकल्पिक रूप से रंगों को एक नई सूची में जोड़ना जैसे कि आप रखने की कोशिश करते हैं प्रत्येक रंग के बराबर% (उदाहरण के लिए यदि आपके पास चार लाल और दो ब्लूज़ हैं जो आप लाल और नीले रंग लेते हैं, तो एक और लाल इसे 50% तक लाने के लिए)। फिर दूसरी संपत्ति के लिए, आप दूसरी संपत्ति के रन बनाने की कोशिश करने के लिए रंगों की सूचियों से लेने को प्राथमिकता दे सकते हैं, ऐसा कुछ। – Patashu
तो आपको आवश्यकता है कि प्रत्येक क्रमपरिवर्तन की घटनाओं की संख्या बराबर बराबर हो? –
@gnibbler: हाँ, क्योंकि मुझे लगता है कि समस्या को और अधिक अच्छी तरह से परिभाषित किया गया है। मैं इस सवाल पर बाधाओं को रखने की कोशिश कर रहा हूं ताकि यह एक मुश्किल लेकिन अपेक्षाकृत दिलचस्प कॉम्स्सी ब्रेनटेज़र, केवल एक गड़बड़ी के बजाय रहता है। असली दुनिया में, जहां मैं मनोविज्ञान प्रयोगशाला में एक शोध सहायक हूं, आमतौर पर बाधाएं "जो भी प्रोफेसर प्रयोग में निचोड़ना चाहता है"। – Marius