एक घन के किनारों पर यादृच्छिक चलना


35

एक चींटी को एक घन के एक कोने में रखा जाता है और वह हिल नहीं सकती। एक मकड़ी विपरीत कोने से शुरू होती है, और किसी भी दिशा में क्यूब के किनारों के साथ समान संभावना साथ आगे बढ़ सकती है । औसतन, मकड़ी को चींटी तक पहुंचने के लिए कितने चरणों की आवश्यकता होगी?1 / 3(x,y,z)1/3

(यह होमवर्क नहीं है, यह एक साक्षात्कार प्रश्न था।)


7
घर का पाठ? अब तक तुमने क्या प्रयास किये हैं?
एड्रियन

मार्कोव श्रृंखलाओं के बारे में, यहाँ एक महान परिचय सेट है ।io
07/

1
आम तौर पर इस तरह की दिनचर्या बुकवर्क को self-studyटैग के साथ चिह्नित किया जाना चाहिए और इसके टैग विकी पर दिशानिर्देशों का पालन करना चाहिए । कृपया इस सवाल को संपादित करें और इसे भविष्य के ऐसे ही सवालों पर शामिल करें
Glen_b -Reinstate Monica

4
@GarethMcCaughan - नहीं यह एक साक्षात्कार प्रश्न था।
एलिजाबेथ सुसान जोसेफ

@ डेल्सक के बाद मैंने एक जावास्क्रिप्ट प्लंकर बनाया। plnkr.co/edit/jYQVDI
abbaf33f

जवाबों:


32

मैं एक मार्कोव श्रृंखला के रूप में समस्या का मॉडलिंग करने का सुझाव देता हूं जहां प्रत्येक राज्य मकड़ी और चींटी के बीच की दूरी का प्रतिनिधित्व करता है। इस मामले में हम 4 संभावित स्थितियों में है दूरी के रूप में हो सकता है । i { 0 , 1 , 2 , 3 }Sii{0,1,2,3}

जब मकड़ी घन के विपरीत कोने पर होती है, तो वह चींटी से 3 कदम की दूरी पर होती है। यह अवस्था में है ।S3

संक्रमण मैट्रिक्स ।P

  • यदि हम एक क्यूब खींचते हैं, तो हम देखते हैं कि जब हम पर होते हैं , तो हर आंदोलन मकड़ी और चींटी के बीच की दूरी को 2 चरणों तक कम कर देता है। इसलिए, जब हम पर होते हैं, तो हम को प्रायिकता 1 के साथ ले जाते हैं ।एस 3 एस 2S3S3S2

  • जब हम स्थिति में , तो हम उस किनारे का उपयोग करके वापस जा सकते हैं जो हम वहां से आए थे या हम दो अन्य किनारों को चुनने पर दूरी को केवल एक कदम तक घटा सकते हैं। तो, जब हम राज्य में हैं हम राज्य के लिए स्थानांतरित कर सकते हैं संभावना 2/3 के साथ और राज्य के लिए संभावना 1/3 के साथ।एस 3 एस 2 एस 1 एस 3S2S3S2S1S3

  • जब हम पर होते हैं , तो हम में तीन संभावित किनारों में से एक का उपयोग करके जा सकते हैं । यदि हम अन्य दो का उपयोग करते हैं, तो हम वापस । इसलिए, जब हम पर होते हैं, हम को प्रायिकता 1/3 के साथ और को 2/3 के साथ स्टेट करने के लिए ले जा सकते हैं ।एस 0 एस 2 एस 1 एस 0 एस 2 2S1S0S2S1S0S2

  • जब हम को प्राप्त करते हैं , तो हम वहां रहते हैं क्योंकि यह हमारा लक्ष्य है। एक अवशोषित अवस्था है।S 0S0S0

P=[PS3S3PS3S2PS3S1PS3S0PS2S3PS2S2PS2S1PS2S0PS1S3PS1S2PS1S1PS1S0PS0S3PS0S2PS0S1PS0S0]=[01001/302/3002/301/30001]

यह एक अवशोषित मार्कोव श्रृंखला है जिसमें तीन क्षणिक ( , , ) और एक अवशोषित अवस्था ( ) है।S 2 S 1 S 0S3S2S1S0

सिद्धांत के अनुसार, क्षणिक राज्यों और अवशोषित राज्यों के साथ एक मार्कोव श्रृंखला के संक्रमण मैट्रिक्स को फिर से लिखा जा सकता है जैसे: r P = [ Q t R 0 r × t I r ]tr

P=[QtR0r×tIr]

जहां एक मैट्रिक्स है, जो कुछ क्षणिक स्थिति से दूसरे क्षणिक स्थिति में संक्रमण की संभावना को दर्शाता है, जबकि एक मैट्रिक्स है, जिसमें से किसी एक से संक्रमण की संभावनाएं हैं क्षणिक से एक के लिए कहा गया है अवशोषित राज्यों। पहचान मैट्रिक्स हमें दिखाता है कि जब किसी भी अवशोषित राज्य में पहुंच जाता है, तो उस राज्य से दूर कोई संक्रमण नहीं होता है। सभी शून्य मैट्रिक्स रूप में व्याख्या की जा सकती है कि किसी भी अवशोषित राज्य से किसी भी में कोई संक्रमण नहीं t×t R t×rtr I r r 0 r × t rtQtt×tRt×rtrIrr0r×trt क्षणिक अवस्थाएँ।

के प्रवेश एक राज्य से संक्रमण की संभावना दर्शाते हैं एक राज्य के लिए वास्तव में एक ही चरण में। चरणों की संभावना प्राप्त करने के लिए हमें की प्रविष्टि की आवश्यकता है । सभी के लिए संक्षेप , हम एक मैट्रिक्स है कि इसकी में शामिल हो जाओ प्रविष्टि क्षणिक राज्य का दौरा करने की उम्मीद संख्या क्षणिक राज्य से शुरू करने के बाद ।Q t i j k ( i , j ) Q k t k ( i , j ) j i(i,j)Qtijk(i,j)Qtkk(i,j)ji

k=0Qtk=(ItQt)1

अवशोषित होने तक चरणों की संख्या प्राप्त करने के लिए, बस की प्रत्येक पंक्ति के मानों को । इसके द्वारा प्रतिनिधित्व किया जा सकता है(ItQt)1

t=(ItQt)11

जहाँ एक कॉलम वेक्टर है जिसमें 1 के बराबर सभी घटक होते हैं।1

आइए हम इसे हमारे मामले में लागू करें:

जैसा कि ऊपर कहा गया है, हमारे मामले में हमारे पास = 3 क्षणिक स्थिति और = 1 अवशोषित अवस्था है, इसलिए: r Q t = [ /// ]tr

Qt=[0101/302/302/30]R=[001/3]

विज़िट की अपेक्षित संख्या वाला मैट्रिक्स

(ItQt)1=[2.54.531.54.53133]

इस मैट्रिक्स की व्याख्या इस प्रकार की जा सकती है। से राज्य शुरू और पहले कम से अवशोषित हो रही हम औसतन जाते हैं, तो, 2.5 गुना, 4.5 बार, और 3 बार।S 0 S 3 S 2 S 1S3S0S3S2S1

राज्य से कुछ कदम दूर की अपेक्षित संख्या राज्य के लिए निम्नलिखित वेक्टर के पहले घटक द्वारा दिया जाता है:S 0S3S0

t=[2.54.531.54.53133][111]=[1097].

यदि हम और क्रमशः शुरू करते हैं, तो दूसरा और तीसरा घटक चरणों की अपेक्षित संख्या है ।S 0 S 2 S 1tS0S2S1


मुझे नहीं पता कि mcmc क्या है। मुझे इसे पढ़ना है और फिर अपने समाधान की जांच करनी है। क्या कोई अच्छा mcmc स्पष्टीकरण है जो आपके समाधान की तारीफ करता है?
एलिजाबेथ सुसान जोसेफ

10
@ElizabethSusanJoseph ध्यान दें कि मार्कोव चेन और एमसीएमसी (मार्कोव चेन मोंटे कार्लो) दो अलग अवधारणाएं हैं (हालांकि एमसीएमसी मार्कोव श्रृंखला पर आधारित है)। यह उत्तर किसी भी चीज़ के लिए MCMC का उपयोग नहीं करता है। तो आप शायद मार्कोव श्रृंखला के बारे में एक अच्छी व्याख्या के लिए खोज रहे हैं, एमसीएमसी के बारे में नहीं।
जुहो कोक्कल

tiagotvv आपकी व्याख्या को ट्रांस्फ़ॉर्म मैट्रिक्स P के उपयोग को परिभाषित करने और समझाने से बेहतर होगा , मात्रा r का अर्थ और स्तंभ वेक्टर की ऊंचाई। वेक्टर टी के बाद के तत्वों के अर्थ के लिए बोनस अंक । :)
एलेक्सिस

@JuhoKokkala - धन्यवाद फिर मैं मार्कोव श्रृंखला स्पष्टीकरण को देखूंगा।
एलिजाबेथ सुसान जोसेफ

@ एलेक्सिस I ने मेट्रिसेस और वैक्टर के संबंध में कुछ स्पष्टीकरण जोड़ा।
tiagotvv

21

चलो उम्मीद चरणों की संख्या हो। आज्ञा दें कि मकड़ी की उत्पत्ति से सटे किसी भी कोने से अपेक्षित चरणों की संख्या हो और चींटी के लिए ।एक्स 1 एक्स 0xx1x0

फिर और । चूँकि एक्स 0 = 1 + 2x=1+x1x1=1+2x0=1+23x1

x1=1+23x0+13x=1+23x0+13+13x1

हमें वह । तो उस और अर्थ ।x 0 = 1 + 2x1=x0+2 x0=7x1=9x0=1+23x0+43x0=7x1=9

हमें अपना उत्तर रूप में मिलता है ।x=10

संपादित करें:

यदि हम क्यूब को निर्देशांक साथ खींचते हैं तो मकड़ी की शुरुआती स्थिति है और चींटी की स्थिति में है।111 000(x,y,z)111000

मकड़ी , या ।101 110011101110

क्यूब की समरूपता द्वारा इनकी समान संख्याओं के लिए अपेक्षित चरण होना चाहिए, जिसे द्वारा दर्शाया गया है । से , हम या तो मूल (संभावना के साथ पर लौट सकते हैं या (संभावना रखता है) ) हम बिंदुओं में से एक पर जा सकते हैं , , पर जो राज्य हम में हैं निर्भर करता है।एक्स 1 1 / 3 2 / 3 001 100 010x1x11/32/3001100010

फिर से, समरूपता द्वारा, इन बिंदुओं में अपेक्षित चरणों की एक ही संख्या होगी जिसे हम कहते हैं । इन स्थितियों से हम एक चरण में संभाव्यता साथ लक्ष्य तक पहुंच सकते हैं या संभावना वाले -positions में से किसी एक पर वापस जा सकते हैं । इसका अर्थ है कि । 1 / 3 एक्स 1 2 / 3 एक्स 0 = 1x01/3x12/3x0=131+23(1+x1)=1+23x1


क्या आप अपने उत्तर को और विस्तृत कर सकते हैं? कृपया आम शब्दों में स्पष्ट करें :)
एलिजाबेथ सूसन जोसेफ

17

यह सोचने के लिए एक अच्छा अमूर्त यह है:

चींटी की स्थिति के बारे में सोचें और स्पाइडर , अब हर एक मकड़ी जो बना सकती है वह अनिवार्य रूप से तीन घटकों में से एक को या से स्विच करेगी । तो सवाल बन जाता है:( 1 , 1 , 1 ) 1 0 0 1(0,0,0)(1,1,1)1001

If I randomly switch bits in (1,1,1) after how many steps in average do I get 0,0,0

हम देखते हैं सबसे छोटा रास्ता 3 स्विच है। चूंकि यह मायने नहीं रखता कि मैं किस बिट के साथ होने की संभावना को शुरू करता हूं 1 * 2/3 * 1/3 = 2/9। यदि हम 1 गलती करते हैं (एक बिट को वापस 1 पर स्विच करें) तो हमें 5 चरणों की आवश्यकता होगी। और एक गलती करने की संभावना 7/9 है - अगर हम केवल एक गलती करना चाहते हैं, तो हमें वहां से वापस आना होगा और सबकुछ फिर से करना होगा - इसलिए 5 चरणों में परिणामस्वरूप ठीक 1 गलती 7/9 * 2/9करने का मौका है और मौका 2 गलतियों के उर्फ ​​7 कदम (7/9)² * 2/9और इतने पर है।

तो चरणों की अपेक्षित औसत संख्या के लिए सूत्र है:

E(steps)=n=0(3+2n)29(79)n=10

आपका समाधान कुछ भ्रामक है। यह सूत्र क्या है? यहाँ क्या है?
एलिजाबेथ सुसान जोसेफ

5
यह वास्तव में सबसे छोटा और साफ समाधान है। समाधान शून्य से अनंत तक की संख्या के nअनंत योग के रूप में है और उस अनंत राशि में वर्तमान पूर्णांक है।
alesc

यह वास्तव में अच्छा है! मेरा उत्तर समान है, लेकिन जोड़े में स्विच के अनुक्रम को तोड़ता है - जो मुझे अंकगणित-ज्यामितीय श्रृंखला के बजाय एक ज्यामितीय चर (या वैकल्पिक रूप से, एक ज्यामितीय श्रृंखला की राशि) की उम्मीद करता है । यह एकमात्र महत्वपूर्ण अंतर है: इससे कोई फर्क नहीं पड़ता कि क्या कोई "पहले तीन स्विच, फिर बाद के जोड़े" (जैसा कि आपने किया था) या "पहला स्विच, फिर बाद के जोड़े" (जैसा मैंने किया था) लेता है, क्योंकि जब तक कि मक्खी को पकड़ा नहीं जाता है 3 स्विच में, फिर या तो आप एक विषम और दो समता के साथ काम कर रहे हैं।
सिल्वर फिश

16

बस tiagotvv के उत्तर की प्रशंसा करना:

मैं स्वाभाविक रूप से इस प्रकार की समस्याओं के बारे में मैट्रीस के रूप में नहीं सोचता (भले ही वे हैं)। मुझे इसे निकालना होगा, जो मैंने नीचे किया है। आप देख सकते हैं कि एस से स्थानांतरित करने के लिए 3 स्थान हैं, जिनमें से सभी अस हैं। किसी भी ए से, आप या तो एस पर वापस आ सकते हैं, या दो बी में से किसी एक पर जा सकते हैं। किसी भी B से, आप E या दो As में से किसी एक पर जा सकते हैं। यह सब tiagotvv द्वारा दिए गए ट्रांस्फ़ॉर्म मैट्रिक्स में बदल जाता है, जिसे ग्राफ रूप में भी तैयार किया जा सकता है।

यहाँ छवि विवरण दर्ज करें

क्योंकि मैं गणित में भयानक हूं, मैं सिर्फ आपकी समस्या का अनुकरण करने की कोशिश करूंगा। आप इसे आर में मार्कोवेकिन पैकेज के साथ कर सकते हैं।

  library(markovchain)
  library(ggplot2)

  # Create a markovchain object, given the states and their transition matrix

  mcCube <- new("markovchain", 
                states = c("S", "A", "B", "E"),
                transitionMatrix = matrix(data = c(0,   1,   0,   0,
                                                   1/3, 0,   2/3, 0,
                                                   0,   2/3, 0,   1/3,
                                                   0,   0,   0,   1), 
                                          byrow = T, nrow = 4),
                name = "cube")

  # The following code calcuates the probability of landing on E after taking
  # between 1 and 100 steps from the start, given the above set of transition
  # probabilities.

  start <- c(1, 0, 0, 0)

  list <- list()

  for (i in 1:100){

    list[[i]] <- (start * mcCube^i)[4] 

  }

   a <- do.call(rbind, list)

   data <- data.frame(propE = a, 
                      steps = c(1:100))

   ggplot(data, aes(x = steps, y = propE)) +
    geom_line(size = 1) +
    ylab("Probability you reached the spider") +
    xlab("Number of steps taken") +
    theme_bw() +
    theme(panel.grid.minor = element_blank())

यहाँ छवि विवरण दर्ज करें

  # This code simulates 1000 different applications of the markov chain where you 
  # take 1000 steps, and records the step at which you landed on E

  list <- list()
  for (i in 1:1000) {


    b <- rmarkovchain(n = 1000, object = mcCube, t0 = "S", include.t0 = T)

    list[[i]] <- 1001 - length(b[b == "E"])

  }

  data <- as.data.frame(do.call(rbind, list))

  ggplot(data, aes(x = V1)) +
    geom_density(fill = "grey50", alpha = 0.5) +
    geom_vline(aes(xintercept = mean(V1))) +
    ylab("Density") +
    xlab("Number of steps to reach E") +
    theme_bw() +
    theme(panel.grid.minor = element_blank())

  mean(data$V1)  # ~10 is the average number of steps to reach E in this set of
                 # simulations

यहाँ छवि विवरण दर्ज करें

tiagotvv के उत्तर को R में शांत किया जा सकता है:

q = matrix(c(0,   1,   0,   
             1/3, 0,   2/3, 
             0,   2/3, 0), byrow = T, nrow = 3)


(solve(diag(3) - q) %*% c(1, 1, 1))[1] # = 10

11

समता के विचार बहुत ही सरल समाधान देते हैं, आश्चर्यजनक रूप से सरल मशीनरी का उपयोग करते हैं: कोई मार्कोव श्रृंखला, कोई पुनरावृत्त अपेक्षाएं, और केवल उच्च विद्यालय स्तर के योग। मूल विचार यह है कि यदि मकड़ी ने दिशा में एक भी बार स्थानांतरित किया है, तो यह अपने मूल समन्वय पर लौट आया है ताकि चींटी की स्थिति में न हो। यदि यह दिशा में विषम संख्या में स्थानांतरित हो गया है, तो इसका चींटी के तालमेल से मेल खाता है। केवल अगर यह तीनों दिशाओं में विषम संख्या में चला गया है तो यह चींटी के , और निर्देशांक से मेल खाएगा ।x x x x y zxxxxxyz

प्रारंभ में मकड़ी ने तीनों दिशाओं में से किसी में भी शून्य चाल चल दी है, इसलिए प्रत्येक दिशा के लिए समता सम है। चींटी तक पहुंचने के लिए तीनों समता की जरूरत होती है।

मकड़ी की पहली चाल के बाद (चलो उस दिशा लेबल करें ), ठीक एक दिशा में विषम समता है और अन्य दो ( और ) भी हैं। चींटी को पकड़ने के लिए, केवल उन दो समानताओं को उलटने की आवश्यकता होती है। चूँकि बाद की चालों की एक विषम संख्या में इसे प्राप्त नहीं किया जा सकता है, अब से हम चालों के जोड़े पर विचार करते हैं । पहली जोड़ी के लिए नौ संभावित संयोजन हैं:y zxyz

(x,x),(x,y),(x,z),(y,x),(y,y),(y,z),(z,x),(z,y),or(z,z)

हमें एक युग्मित चाल के बाद चींटी तक पहुंचने के लिए और दिशाओं में जाने की जरूरत है , और नौ में से दो संयोजन इसे प्राप्त करेंगे: और यह सुनिश्चित करेगा कि सभी तीन समानताएं विषम हैं।yz(y,z)(z,y)

अन्य सात संयोजन एक विषम और दो समता छोड़ते हैं। तीन दोहराया चालें, , या , सभी समानताएं अपरिवर्तित छोड़ देती हैं, इसलिए हमें चींटी तक पहुंचने के लिए अभी भी एक और एक आंदोलन की आवश्यकता होती है । अन्य जोड़ियों में दो अलग-अलग चालें होती हैं, जिनमें एक दिशा में होती है। यह और अन्य परिमाणों (या तो या ) में से एक की समता को स्विच करता है इसलिए हम अभी भी एक विषम और दो समता से बचे हुए हैं। उदाहरण के लिए जोड़ी हमें एक और और एक और(x,x)(y,y)(z,z)yzxxyz(x,z)xyचींटी तक पहुँचने के लिए: एक समतुल्य स्थिति (कुल्हाड़ियों को छुड़ाने के बाद) जहाँ हम पहले थे। हम फिर उसी तरह से अगले युग्मित चाल का विश्लेषण कर सकते हैं।

सामान्य रूप से युग्मित चालों में एक विषम और दो समताएँ होती हैं, और या तो तीन विषम परिमाणों (प्रायिकता ) और चींटी की तत्काल पकड़ के साथ समाप्त होगी , या एक विषम और दो समता के साथ () प्रायिकता ) के साथ जो हमें उसी स्थिति में लौटाता है।2979

बता दें कि चींटी तक पहुंचने के लिए की जोड़ी की जरूरत होती है। स्पष्ट रूप से सफलता के संभावना के साथ support पर ज्यामितीय वितरण का अनुसरण करता है इसलिए इसका अर्थ । बता दें कि में शुरुआती चाल की कुल संख्या होनी चाहिए, जिसमें शुरुआती चाल और बाद के जोड़े शामिल हैं। फिर इसलिए, अपेक्षाओं की रैखिकता को लागू करते हुए, ।MM{1,2,3,}p=29E(M)=p1=92=4.5NMN=2M+1E(N)=2E(M)+1=2×4.5+1=10

वैकल्पिक रूप से आप नोट कर सकते हैं और केवल गैर-नकारात्मक पूर्णांक मानों को लेते हुए असतत वितरण के माध्यम के लिए प्रसिद्ध सूत्र को लागू कर सकते हैं , । यह देता है, जो कि एक ज्यामितीय श्रृंखला है जिसका पहला शब्द और सामान्य है अनुपात तो सम । हम पहले की तरह ले सकते हैं ।P(Mm)=(79)m1E(M)=m=1P(Mm)E(M)=m=1(79)m1a=1r=79 a1r=117/9=12/9=92E(N)

मार्कोव श्रृंखला समाधानों की तुलना

मार्कोव श्रृंखला संक्रमण मैट्रिक्स से मैंने इसे कैसे देखा होगा? @ DLDahly के अंकन का उपयोग करते हुए, संक्रमण मैट्रिक्स में स्थित राज्य विषम समता के साथ दिशाओं की संख्या के मेरे विवरण के अनुरूप हैं।

क्यूब में मकड़ी का शिकार चींटी

एक-चरण संक्रमण मैट्रिक्स है

पी=[पीएसएसपीएसपीएसबीपीएसपीएसपीपीबीपीपीबीएसपीबीपीबीबीपीबीपीएसपीपीबीपी]=[01001/302/3002/301/30001]

पहली पंक्ति हमें दिखाती है कि एक आंदोलन के बाद, मकड़ी को राज्य ए (एक विषम और दो समता) में रहने की गारंटी है। दो-चरण संक्रमण मैट्रिक्स है:

पी(2)=पी2=[1/302/3007/902/92/904/91/30001]

दूसरी पंक्ति हमें दिखाती है कि एक बार जब मकड़ी ने राज्य A में प्रवेश किया है, तो दो चालों में या तो वह A के साथ स्थिति में वापस आ गई है या राज्य E (सभी विषम समता) में पहुंच गई है और चींटी को पकड़ लिया है, जिसमें प्रायिकता । इसलिए राज्य ए में पहुंचने पर, हम दो-चरण संक्रमण मैट्रिक्स से देखते हैं कि आवश्यक दो-चरण की संख्या का विश्लेषण ऊपर के रूप में ज्यामितीय वितरण का उपयोग करके किया जा सकता है। ऐसा नहीं है कि मैंने अपना समाधान कैसे पाया, लेकिन यह कभी-कभी संक्रमण मैट्रिक्स की पहली कुछ शक्तियों की गणना करने के लायक है, यह देखने के लिए कि क्या इस तरह के एक उपयोगी पैटर्न का फायदा उठाया जा सकता है। मैंने कभी-कभी इसे एक मैट्रिक्स को पलटने या हाथ से एक ईगेंडेकोम्पोजिशन करने की तुलना में सरल समाधान देने के लिए पाया है - बेशक कुछ ऐसा है जो केवल परीक्षा या साक्षात्कार की स्थिति में वास्तव में प्रासंगिक है।2 / 97/92/9


2

मैंने आपके प्रश्न का उत्तर संख्यात्मक रूप से देने के लिए एक छोटा जावा प्रोग्राम लिखा है। मकड़ी का पता लगाना वास्तव में यादृच्छिक है, जिसका अर्थ है कि यह चींटी से मिलने से पहले चक्रों में भी पार कर सकता है।

हालांकि, आपने "विपरीत कोने" शब्द को परिभाषित नहीं किया है, इसलिए मेरे पास दो अलग-अलग परिदृश्य हैं। एक ही विमान में या घन के पार के रूप में विपरीत। पहले परिदृश्य में, सबसे छोटा रास्ता 2 चरणों का है, और दूसरे परिदृश्य में 3 चरण हैं।

मैंने 100 मिलियन दोहराव का उपयोग किया और परिणाम निम्नलिखित हैं:

-- First scenario --
Steps sum: 900019866
Repeats: 100000000
Avg. step count: 9.00019866

-- Second scenario --
Steps sum: 1000000836
Repeats: 100000000
Avg. step count: 10.00000836

सोर्स कोड:

import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.IntStream;

public class ProbabilityQuizSpider {

    // Edges of the cube
    private static final int[][] EDGES = new int[][] {
            {1, 3, 7}, // corner 0
            {0, 2, 4}, // corner 1
            {1, 3, 5}, // corner 2
            {0, 2, 6}, // corner 3
            {1, 5, 7}, // corner 4
            {2, 4, 6}, // corner 5
            {3, 5, 7}, // corner 6
            {0, 4, 6}  // corner 7
    };

    private static final int START = 0; // Spider
    private static final int FINISH = 5; // Ant
    private static final int REPEATS = (int) Math.pow(10, 8);

    public static void main(String[] args) {

        final Random r = new Random();
        final AtomicLong stepsSum = new AtomicLong();

        IntStream.range(0, REPEATS).parallel().forEach(i -> {

            int currentPoint = START;
            int steps = 0;

            do {

                // Randomly traverse to next point
                currentPoint = EDGES[currentPoint][r.nextInt(3)];

                // Increase number of steps
                steps++;

            } while(currentPoint != FINISH);

            stepsSum.addAndGet(steps);

        });

        // Results
        System.out.println("Steps sum: " + stepsSum.get());
        System.out.println("Repeats: " + REPEATS);
        System.out.println("Avg. step count: " + (((double) stepsSum.get()) / ((double) REPEATS)));

    }

}

EDIT: स्क्रिप्ट में एक टाइपो तय किया (और परिणाम भी अपडेट किया)


2
मुझे लगता है कि आपके किनारे गलत हैं। कोने 3 की सूची में 7 हैं, लेकिन कोने 7 की सूची में 3 नहीं हैं। (मेरा सुझाव है कि संख्याओं को खांचों को मैप करने का सही तरीका 0..7 है। यह कहना है कि प्रत्येक बिट स्थिति एक धुरी से मेल खाती है, ताकि एक किनारे का एक्सओआर 1, 2, या 4 के साथ XOR के बराबर हो।)
गैरेथ मैकक्घन

1
टिप्पणी के लिए धन्यवाद। मैंने कोने # 3 को परिभाषित करते हुए एक टाइपो बनाया है, यह होना चाहिए {0, 2, 6}। मैंने कार्यक्रम को फिर से चलाया है और निम्न परिणाम प्राप्त किया है: कोने # 0 से कोने # 5 (क्यूब के शरीर विकर्ण) के लिए ट्रैवर्सिंग के लिए 10.00000836 चरण। यह @ हनपु के अनुरूप भी है।
alesc

हाँ, बेहतर है।
गैरेथ मैकक्घान

2

मैंने मोंटे कार्लो सिमुलेशन ( ) के माध्यम से आपके किया और ।मीटर एक n ( रों टी पी एस )10n=104मीटरn(रोंटीपीरों)10

मोंटे कार्लो सिमुलेशन ($ n = 10 ^ 4 $)

यहाँ R कोड मैंने इस्तेमाल किया है:

ant = c(0,0,0) # ant's coordinates 

sim = 1e4 # number of MC simulations
steps = numeric() # initialize array of steps

for (i in 1:sim)
{
  spider = c(1,1,1) # spider's coordinates
  count = 0 # initialize step counter

  # while ant's coordinates == spider's coordinates
  while (!isTRUE(all.equal(ant, spider)))
  {

  # random walk in one of three dimensions
  xyz = trunc(runif(1,1,4))

  # let the spider move
  if (spider[xyz] == 1) 
    {
    spider[xyz] = 0
    } else if (spider[xyz] == 0) 
    {
    spider[xyz] = 1
    }

  # add one step
  count = count + 1
  }

# add the number of step occurred in the ith iteration
steps = c(steps, count)

# print i and number of steps occurred
cat("\n", i, " ::: ", count)
}

# print the mean of steps
(mean(steps))

9
कोड अच्छा और स्पष्ट है - लेकिन यह आपके उपयोगकर्ताओं के बजाय आधे घंटे के दौरान एक लाख लाइनों को प्रिंट करके देखने के लिए कह रहा है! और आप कैसे जानते हैं कि सही उत्तर नहीं है, कहते हैं, ? :-) Fwiw, आप कुछ देशी दोहन कर सकते हैं कि यह एक दूसरे के नीचे करने के लिए तेजी लाने के लिए कार्य करता है:10.000001Rn.sim <- 1e6; x <- matrix(runif(n.sim*3), ncol=3); moves <- x >= pmax(x[, 1], x[, 2], x[, 3]); positions <- apply(moves, 2, cumsum) %% 2; types <- rowSums(positions); vertices <- types[types==0 | types==3]; transitions <- cumsum(diff(vertices) != 0); n.sim / transitions[length(transitions)]
whuber

-1

मेरा मानना ​​है कि जब "सही कोने" का उल्लेख नहीं किया जाता है, तो अलस्कास सही रास्ते पर होता है। जब तक कि मैं इस प्रश्न के बारे में कुछ भी याद नहीं कर रहा हूँ, तब तक कोई गलत उत्तर नहीं है, केवल मान्यताओं के आधार पर उत्तर नहीं हैं। क्यूब का आकार परिभाषित नहीं है। IE 10 क्यूबिक फीट, 1000 क्यूबिक फीट आदि चींटी का आकार परिभाषित नहीं है IE छोटा बगीचा, बढ़ई, विशाल लाल आदि, स्पाइडर प्रकार को परिभाषित नहीं किया गया है (चरण आकार निर्धारित करने के लिए) IE छोटा बगीचा, टारेंटयुला आदि यदि आप सभी को संयोजित करते हैं "परिभाषित नहीं"। "चर। उत्तर 0 चरण या एक अनिर्धारित / अनंत संख्या में कदम हो सकते हैं।


3
यह जवाब साक्षात्कार के अगले स्तर तक एक नहीं मिलेगा जब तक कि यह शायद बागवानी की स्थिति के लिए नहीं था।
whuber

1
इस मामले में यह पर्याप्त रूप से स्पष्ट है कि 'चरण' का अर्थ है 'एक नोड (कोने) से एक आसन्न नोड तक', और यह बिल्कुल स्पष्ट है कि एक घन के "विपरीत कोने" का क्या अर्थ है - उदाहरण के लिए एक इकाई घन लें - यदि चींटी एक यूनिट क्यूब पर कोने (x, y, z) पर होती है, मकड़ी (1-x, 1-y, 1-z) पर होती है (इसलिए यदि चींटी मूल में हो, तो मकड़ी का बच्चा (1,1) , 1))। जैसे, आपकी किसी भी चिंता को पूछे जा रहे सवाल से संबंधित नहीं लगता है। [मतदाताओं पर ध्यान दें: जबकि मुझे नहीं लगता है कि यह एक बहुत अच्छा उत्तर है, जिसमें एक महत्वपूर्ण संपादन नहीं है, मुझे नहीं लगता कि यह एक विलोपन वोट का विषय होना चाहिए - ऊपर और नीचे वोट पर्याप्त हैं]
Glen_b -Reinstate Monica

@Glen_b चूंकि यह प्रश्न के विवरण पर स्पष्टता की मांग करता है, इसलिए मैंने सोचा कि यह संभवतः एक ठोस उत्तर के बजाय एक टिप्पणी के रूप में था।
सिल्वरफिश

1
@Silverfish आप सही हो सकते हैं, लेकिन तब यह 'उत्तर नहीं' के रूप में बंद हो जाएगा। मैंने इसे "यह प्रश्न उत्तर देने योग्य नहीं है" कहने के प्रयास के बजाय पढ़ा, जिसे मैं सामान्य रूप से तर्क के साथ समर्थन करने पर उत्तर के रूप में मानूंगा, लेकिन मुझे लगता है कि कारण बस प्रश्न को गलत समझने पर आधारित हैं।
Glen_b -Reinstate मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.