สุ่มเดินบนขอบของลูกบาศก์


35

วางมดไว้ที่มุมของลูกบาศก์และไม่สามารถเคลื่อนที่ได้ แมงมุมจะเริ่มต้นจากมุมตรงข้ามและสามารถย้ายไปตามขอบของก้อนในทิศทางใดด้วยความน่าจะเท่ากับ1/3โดยเฉลี่ยแมงมุมจะต้องก้าวไปกี่ก้าว?1 / 3(x,y,z)1/3

(นี่ไม่ใช่การบ้านมันเป็นคำถามสัมภาษณ์)


7
การบ้าน? คุณลองทำอะไรไปแล้ว?
เอเดรีย

เกี่ยวกับโซ่มาร์คอฟนี่คือช่วงแนะนำที่ดีsetosa.io/blog/2014/07/26/markov-chains
DL Dahly

1
โดยปกติการจัดเรียงของ bookwork ประจำวันนี้ควรจะทำเครื่องหมายกับself-studyแท็กและปฏิบัติตามแนวทางที่ของวิกิพีเดียแท็ก โปรดแก้ไขคำถามนี้และรวมไว้ในคำถามที่คล้ายกันในอนาคต
Glen_b

4
@GarethMcCaughan - ไม่เป็นคำถามสัมภาษณ์
Elizabeth Susan Joseph

กำลังติดตาม @alesc ฉันสร้าง JavaScript Plunker plnkr.co/edit/jYQVDI
abbaf33f

คำตอบ:


32

ฉันแนะนำให้ทำแบบจำลองปัญหาเป็นลูกโซ่มาร์คอฟซึ่งแต่ละรัฐแสดงระยะห่างระหว่างแมงมุมกับมด ในกรณีนี้เรามี 4 รัฐเป็นไปได้เป็นระยะทางที่สามารถ\}ฉัน{ 0 , 1 , 2 , 3 }Sii{0,1,2,3}

เมื่อแมงมุมอยู่ที่มุมตรงข้ามของลูกบาศก์มันจะอยู่ห่างจากมด 3 ก้าว มันมีอยู่ในรัฐS_3S3

สร้างเมทริกซ์การเปลี่ยนแปลง{P}P

  • หากเราวาดลูกบาศก์เราจะเห็นว่าเมื่อเราอยู่ในสถานะทุกการเคลื่อนไหวจะลดระยะห่างระหว่างแมงมุมและมดเป็น 2 ขั้นตอน ดังนั้นเมื่อเราอยู่ในสถานะเราจะย้ายไปที่สถานะด้วยความน่าจะเป็น 1S 3 S 2S3S3S2

  • เมื่อเราอยู่ในสถานะเราสามารถกลับไปที่สถานะโดยใช้ขอบที่เรามาจากที่นั่นหรือเราสามารถลดระยะห่างให้เหลือเพียงขั้นตอนเดียวถ้าเราเลือกอีกสองขอบ ดังนั้นเมื่อเราอยู่ในสถานะเราสามารถย้ายไปยังสถานะด้วยความน่าจะเป็น 2/3 และไปยังสถานะด้วยความน่าจะเป็น 1/3S 3 S 2 S 1 S 3S2S3S2S1S3

  • เมื่อเราอยู่ในสถานะเราสามารถไปที่สถานะโดยใช้หนึ่งในสามขอบที่เป็นไปได้ ถ้าเราใช้อีกสองเรากลับไปที่รัฐs_2ดังนั้นเมื่อเราอยู่ในสถานะเราสามารถย้ายไปที่สถานะด้วยความน่าจะเป็น 1/3 และไปยังด้วยความน่าจะเป็น 2/3S 0 S 2 S 1 S 0 S 2S1S0S2S1S0S2

  • เมื่อเราไปถึงเราอยู่ที่นั่นเพราะมันเป็นเป้าหมายของเรา เป็นสถานะที่น่าสนใจS 0S0S0

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

นี่คือห่วงโซ่มาร์คอฟที่มีการดูดซับสามสถานะชั่วคราว ( , , ) และอีกหนึ่งสถานะการดูดซับ ( )S 2 S 1 S 0S3S2S1S0

ตามทฤษฎีเมทริกซ์การเปลี่ยนแปลงของห่วงโซ่มาร์คอฟกับรัฐชั่วคราวและดูดซับรัฐสามารถเขียนเป็น: r P = [ Q t R 0 r × t ฉัน r ]tr

P=[QtR0r×tIr]

โดยที่เป็นเมทริกซ์ที่แสดงความน่าจะเป็นของการเปลี่ยนจากสถานะชั่วคราวเป็นสถานะชั่วคราวอีกขณะเป็นเมทริกซ์ด้วยความน่าจะเป็นของการเปลี่ยนจากหนึ่งในชั่วคราวระบุให้เป็นหนึ่งในดูดซับรัฐ identity matrixแสดงให้เราเห็นว่าเมื่อใดก็ตามที่สถานะการดูดซับอยู่ถึงจะไม่มีการเปลี่ยนแปลงจากสถานะนั้น ศูนย์เมทริกซ์ทั้งหมดสามารถตีความได้ว่าไม่มีการเปลี่ยนสถานะจากใด ๆ ที่น่าสนใจไปยังที×T Rเสื้อ×RTRฉัน R R 0 R × ทีอาร์ทีQtt×tRt×rtrIrr0r×trt สถานะชั่วคราว

รายการของแสดงถึงความน่าจะเป็นในการเปลี่ยนจากสถานะเป็นสถานะในขั้นตอนเดียว ที่จะได้รับความน่าจะเป็นขั้นตอนที่เราต้องการ การเข้ามาของ k ข้อสรุปสำหรับทุกเราได้รับเมทริกซ์ที่มีในตนรายการจำนวนที่คาดหวังของการเข้าชมไปยังรัฐชั่วคราวหลังจากที่เริ่มต้นจากรัฐชั่วคราวฉันQ tฉัน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

เพื่อให้ได้จำนวนของขั้นตอนจนกว่าจะถูกดูดซึมเพียงสรุปค่าของแถวของแต่ละคน1} สิ่งนี้สามารถแสดงได้โดย(ItQt)1

t=(ItQt)11

โดยที่เป็นเวกเตอร์คอลัมน์ที่มีส่วนประกอบทั้งหมดเท่ากับ 11

ให้เราใช้สิ่งนี้กับกรณีของเรา:

ตามที่ระบุไว้ข้างต้นในกรณีของเราเรามีสถานะชั่วคราว = 3 และ = 1 ดูดซับสถานะดังนั้น: R Q T = [ 0 1 0 1 / 3 0 2 / 3 0 2 / 3 0 ]tr

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

เมทริกซ์ที่มีจำนวนการเข้าชมที่คาดไว้คือ

(ItQt)1=[2.54.531.54.53133]

เมทริกซ์นี้สามารถตีความได้ดังนี้ เริ่มต้นจากสถานะและก่อนที่จะถูกดูดซับที่เราไปโดยเฉลี่ย 2.5 ครั้ง, 4.5 เท่าและ 3 ครั้งS3S0S3S2S1

จำนวนขั้นตอนที่คาดหวังจากสถานะถึงสถานะนั้นได้รับจากส่วนประกอบแรกของเวกเตอร์ต่อไปนี้:S3S0

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

S 0tS0S2S1


ฉันไม่รู้ว่า mcmc คืออะไร ฉันต้องอ่านมันแล้วตรวจสอบทางออกของคุณ มีคำอธิบาย mcmc ที่ดีที่สอดคล้องกับโซลูชันของคุณหรือไม่?
Elizabeth Susan Joseph

10
@ElizabethSusanJoseph โปรดทราบว่าโซ่มาร์คอฟและ MCMC (มาร์คอฟโซ่มอนติคาร์โล) เป็นสองแนวคิดที่แตกต่างกัน (แม้ว่า MCMC จะขึ้นอยู่กับกลุ่มมาร์คอฟ) คำตอบนี้ไม่ได้ใช้ MCMC เพื่ออะไร ดังนั้นคุณอาจค้นหาคำอธิบายที่ดีเกี่ยวกับโซ่มาร์คอฟไม่ใช่เกี่ยวกับ MCMC
Juho Kokkala

tiagotvv คำอธิบายของคุณจะได้รับการปรับปรุงโดยการกำหนดและอธิบายการใช้เมทริกซ์การเปลี่ยนแปลงP , ความหมายของปริมาณrและความสูงของเวกเตอร์คอลัมน์ คะแนนโบนัสสำหรับความหมายขององค์ประกอบที่ตามมาของเวกเตอร์ตัน :)
อเล็กซิส

@JuhoKokkala - ขอบคุณฉันจะดูคำอธิบายโซ่มาร์คอฟ
Elizabeth Susan Joseph

@Alexis ฉันได้เพิ่มคำอธิบายเกี่ยวกับเมทริกซ์และเวกเตอร์
tiagotvv

21

xx1x0

จากนั้นและ\ ตั้งแต่ x=1+x1x0=1+23x1

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

เราได้รับที่2 ดังนั้นหมายความว่าและ 9x1=x0+2x0=1+23x0+43x0=7x1=9

เราได้คำตอบของเราเป็นxx=10

แก้ไข:

ถ้าเราวาดลูกบาศก์ด้วยพิกัดดังนั้นคือตำแหน่งเริ่มต้นของแมงมุมและตำแหน่งของมด(x,y,z)111000

แมงมุมสามารถย้ายไปทั้ง ,หรือ110011101110

โดยสมมาตรของก้อนเหล่านี้จะต้องมีหมายเลขเดียวกันของขั้นตอนคาดว่าจะมดแสดงโดยx_1จากเราสามารถกลับไปที่จุดเริ่มต้น (ด้วยความน่าจะเป็น ) หรือ (ด้วยความน่าจะเป็น ) เราสามารถไปที่จุดใดจุดหนึ่ง , ,ขึ้นอยู่กับสถานะที่เราอยู่x1x11/32/3001100010

อีกครั้งโดยสมมาตรจุดเหล่านี้จะมีหมายเลขเดียวกันของขั้นตอนคาดว่าที่เราเรียกx_0จากตำแหน่งเหล่านี้เราสามารถบรรลุเป้าหมายในขั้นตอนที่หนึ่งที่มีความน่าจะเป็นหรือกลับไปให้เป็นหนึ่งใน -positions กับความน่า2/3ซึ่งหมายความว่า \x01/3x12/3x0=131+23(1+x1)=1+23x1


คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับคำตอบของคุณได้ไหม? โปรดอธิบายในแง่คนธรรมดา :)
อลิซาเบ ธ ซูซานโจเซฟ

17

สิ่งที่เป็นนามธรรมที่ดีที่จะคิดว่ามันคือ:

คิดว่าตำแหน่งของมดเป็นแมงมุมตอนนี้ย้ายแต่ละแมงมุมสามารถทำให้เป็นหลักจะเปลี่ยนว่าหนึ่งในสามองค์ประกอบจากหรือ0ดังนั้นคำถามจะกลายเป็น:(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 - ถ้าเราต้องการทำผิดพลาดเพียงครั้งเดียวเราต้องกลับจากที่นั่นและทำทุกอย่างอีกครั้ง - ดังนั้นโอกาสในการทำผิดพลาด 1 ครั้งทำให้เกิด 5 ขั้นตอน7/9 * 2/9และโอกาส การทำผิดพลาด 2 ครั้งหรือ 7 ขั้นตอนเป็น(7/9)² * 2/9อย่างนั้นเป็นต้น

ดังนั้นสูตรสำหรับจำนวนขั้นตอนเฉลี่ยที่คาดหวังคือ:

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

ทางออกของคุณคือสิ่งที่ทำให้เกิดความสับสน สูตรนี้คืออะไร? นี่คืออะไร
Elizabeth Susan Joseph

5
มันเป็นทางออกที่สั้นและสะอาดที่สุด คำตอบอยู่ในรูปแบบของผลรวมอนันต์ของตัวเลขจากศูนย์ถึงอินฟินิตี้และnเป็นจำนวนเต็มปัจจุบันในผลรวมอนันต์
alesc

นี่เป็นสิ่งที่ดีจริงๆ! คำตอบของฉันจะคล้ายกัน แต่แบ่งถึงลำดับของสวิทช์เป็นคู่ - ซึ่งช่วยให้ฉัน expectate ตัวแปรเรขาคณิต (หรือหรือสรุปชุดเรขาคณิต) มากกว่าผลรวมชุด arithmetico ทางเรขาคณิต นั่นเป็นข้อแตกต่างที่สำคัญเพียงอย่างเดียว: มันไม่สำคัญว่าจะมีใครใช้ "สวิตช์สามตัวแรกจากนั้นคู่ต่อมา" (ตามที่คุณทำ) หรือ "สวิตช์แรกจากนั้นจึงจับคู่ตามลำดับ" (เหมือนที่ฉันทำ) ใน 3 สวิตช์จากนั้นไม่ว่าคุณจะจัดการกับคี่หรือคู่แบบใดแบบหนึ่ง
Silverfish

16

เพียงเพื่อชมเชยคำตอบของ tiagotvv:

ฉันไม่คิดว่าปัญหาเหล่านี้เป็นเมทริกซ์ (ถึงแม้ว่าพวกเขาจะเป็น) ฉันต้องวาดมันออกมาซึ่งฉันได้ทำไว้ด้านล่าง คุณจะเห็นว่ามี 3 ที่ที่จะย้ายจาก S ซึ่งทั้งหมดเป็น จาก A ใด ๆ คุณสามารถกลับไปที่ S หรือย้ายไปที่หนึ่งในสอง Bs จาก B ใด ๆ คุณสามารถย้ายไปที่ E หรือหนึ่งในสองของ ทั้งหมดนี้แปลเป็นเมทริกซ์การเปลี่ยนแปลงที่กำหนดโดย tiagotvv ซึ่งสามารถวาดในรูปแบบกราฟ

ป้อนคำอธิบายรูปภาพที่นี่

เนื่องจากฉันคณิตศาสตร์แย่มากฉันจะลองจำลองปัญหาของคุณ คุณสามารถทำได้ด้วยแพ็คเกจ markovchain ใน R

  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

xxxxxyz

ตอนแรกแมงมุมเคลื่อนที่เป็นศูนย์ในทิศทางใดทิศทางหนึ่งในสามทิศทางดังนั้นความเท่าเทียมกันสำหรับแต่ละทิศทางจึงเท่ากัน ทั้งสาม parities ต้องพลิกไปถึงมด

xyz

(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

MM{1,2,3,}p=29E(M)=p1=92=4.5NMN=2M+1E(N)=2E(M)+1=2×4.5+1=10

หรือคุณอาจทราบและใช้สูตรที่รู้จักกันดีสำหรับค่าเฉลี่ยของการกระจายต่อเนื่องใช้เวลาเพียงแค่ค่าจำนวนเต็มไม่เป็นลบ ,เมตร) สิ่งนี้จะให้ซึ่งเป็นชุดรูปทรงเรขาคณิตที่มีคำแรกและทั่วไป อัตราส่วนดังนั้นจึงมีผลรวม{2} จากนั้นเราสามารถใช้เหมือนเดิม E ( M ) = m = 1 P ( M m ) E ( M ) = m = 1 ( 7P(Mm)=(79)m1E(M)=m=1P(Mm)a=1r=7E(M)=m=1(79)m1a=1r=79 E(N)a1r=117/9=12/9=92E(N)

เปรียบเทียบกับโซลูชันเชนของมาร์คอฟ

ฉันจะเห็นสิ่งนี้จากเมทริกซ์การเปลี่ยนแปลงเชนมาร์คอฟได้อย่างไร การใช้สัญลักษณ์ของ @ DLDahly สถานะในเมทริกซ์การเปลี่ยนแปลงจะสอดคล้องกับคำอธิบายของฉันเกี่ยวกับจำนวนของทิศทางที่มีพาริตีคี่

การล่ามดแมงมุมในลูกบาศก์

เมทริกซ์การเปลี่ยนแปลงขั้นตอนเดียวคือ

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

แถวแรกแสดงให้เราเห็นว่าหลังจากการเคลื่อนไหวหนึ่งครั้งแมงมุมจะรับประกันว่าอยู่ในสถานะ A (หนึ่งคี่และสอง parities) เมทริกซ์การเปลี่ยนแปลงสองขั้นตอนคือ:

P(2)=P2=[1/302/3007/902/92/904/91/30001]

7/92/9. ดังนั้นเมื่อมาถึงสถานะ A เราจะเห็นได้จากเมทริกซ์การเปลี่ยนแปลงสองขั้นตอนที่สามารถวิเคราะห์จำนวนการเคลื่อนที่สองขั้นตอนโดยใช้การแจกแจงเชิงเรขาคณิตดังกล่าวข้างต้น นี่ไม่ใช่วิธีที่ฉันพบวิธีแก้ปัญหาของฉัน แต่บางครั้งมันก็คุ้มค่าที่จะคำนวณพลังสองสามอันแรกของเมทริกซ์การเปลี่ยนภาพเพื่อดูว่ารูปแบบที่มีประโยชน์เช่นนี้สามารถใช้ประโยชน์ได้หรือไม่ ฉันได้พบสิ่งนี้เป็นครั้งคราวเพื่อให้วิธีแก้ปัญหาที่ง่ายกว่าไม่ต้องสลับเมทริกซ์หรือทำ eigendecomposition ด้วยมือ - เป็นที่ยอมรับว่ามีบางสิ่งที่เกี่ยวข้องกับการสอบหรือสัมภาษณ์เท่านั้น


2

ฉันได้เขียนโปรแกรม Java สั้น ๆ เพื่อตอบคำถามของคุณเป็นตัวเลข การเคลื่อนที่ของแมงมุมนั้นสุ่มอย่างแท้จริงซึ่งหมายความว่ามันสามารถเคลื่อนที่เป็นวงกลมได้ก่อนที่จะไปหามด

อย่างไรก็ตามคุณไม่ได้กำหนดคำว่า "มุมตรงข้าม" ดังนั้นฉันจึงมีสองสถานการณ์ที่แตกต่างกัน ตรงข้ามกับในระนาบเดียวกันหรือข้ามลูกบาศก์ ในสถานการณ์แรกเส้นทางที่สั้นที่สุดคือ 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)));

    }

}

แก้ไข: แก้ไขการพิมพ์ผิดในสคริปต์ (และปรับปรุงผลลัพธ์ด้วย)


2
ฉันคิดว่าคุณขอบผิด มุม 3 มี 7 อยู่ในรายการ แต่มุม 7 ไม่มี 3 อยู่ในรายการ (ฉันขอแนะนำว่าวิธีที่ถูกต้องในการทำแผนที่จุดยอดกับตัวเลข 0..7 คือการบอกว่าตำแหน่งบิตแต่ละตำแหน่งสอดคล้องกับหนึ่งแกนเพื่อให้การเคลื่อนที่ผ่านขอบเท่ากับ XOR เท่ากับ 1, 2 หรือ 4)
Gareth McCaughan

1
ขอบคุณสำหรับความคิดเห็น ฉันได้พิมพ์ผิดเมื่อกำหนดมุม # 3 {0, 2, 6}มันควรจะเป็น ฉันรันโปรแกรมอีกครั้งและได้ผลลัพธ์ดังต่อไปนี้: 10.00000836 ขั้นตอนสำหรับการเคลื่อนที่จากมุม # 0 ถึงมุม # 5 (เส้นทแยงมุมของลูกบาศก์) สิ่งนี้สอดคล้องกับ @Hunaphu ด้วย
alesc

ใช่ดีกว่ามาก
Gareth McCaughan

2

n=104mean(steps)10

การจำลอง Monte Carlo ($ 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
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)]

-1

ฉันเชื่อว่า alesc อยู่ในเส้นทางที่ถูกต้องเมื่อพูดถึง "อย่างไรก็ตามคุณไม่ได้นิยามคำว่า" มุมตรงข้าม "ยกเว้นว่าฉันหายไปบางอย่างในคำถามไม่มีคำตอบที่ถูกต้องเพียงคำตอบตามสมมติฐานขนาดลูกบาศก์ไม่ได้กำหนดไว้ IE 10 ลูกบาศก์ฟุต, 1,000 ลูกบาศก์ฟุตเป็นต้นขนาดมดไม่ได้กำหนด IE สวนขนาดเล็ก, ช่างไม้, ยักษ์แดง ฯลฯ ประเภทแมงมุมไม่ได้กำหนด (เพื่อกำหนดขนาดขั้นตอน) สวนขนาดเล็ก IE, ทารันทูล่า ฯลฯ หากคุณรวมทั้งหมด "ไม่ได้กำหนดไว้ "ตัวแปรคำตอบอาจเป็น 0 ขั้นตอนหรือขั้นตอนไม่ จำกัด จำนวน / ไม่สิ้นสุด


3
คำตอบนี้จะไม่ได้รับหนึ่งในการสัมภาษณ์ระดับต่อไปเว้นแต่มันอาจจะเป็นตำแหน่งทำสวน
whuber

1
ในกรณีนี้มันชัดเจนพอที่ 'ขั้นตอน' หมายถึง 'การย้ายจากโหนดหนึ่ง (มุม) ไปยังโหนดที่อยู่ติดกัน' และมันค่อนข้างชัดเจนว่า "มุมตรงข้าม" ของลูกบาศก์หมายถึงอะไร - ยกตัวอย่างเช่น มดอยู่ที่มุม (x, y, z) บนยูนิตลูกบาศก์, แมงมุมอยู่ที่ (1-x, 1-y, 1-z) (ดังนั้นถ้ามดอยู่ที่จุดกำเนิด, แมงมุมอยู่ที่ (1,1 , 1)) ดังนั้นข้อกังวลของคุณจึงไม่เกี่ยวข้องกับคำถามที่ถูกถาม [หมายเหตุถึงผู้ออกเสียงลงคะแนน: แม้ว่าฉันจะไม่คิดว่านี่เป็นคำตอบที่ดีหากไม่มีการแก้ไขที่สำคัญ แต่ฉันไม่คิดว่านี่จะเป็นเรื่องของการลบคะแนน - ขึ้นและลงคะแนนเสียงพอเพียง]
Glen_b

@Glen_b เนื่องจากดูเหมือนว่ากำลังมองหาความชัดเจนในรายละเอียดของคำถามฉันคิดว่านี่อาจเป็นความคิดเห็นมากกว่าคำตอบที่สำคัญ
Silverfish

1
@Silverfish คุณอาจถูกต้อง แต่แล้วมันจะปิดเป็น 'ไม่ใช่คำตอบ' ฉันอ่านมันแทนความพยายามที่จะพูดว่า "คำถามนี้ไม่สามารถตอบได้" ซึ่งโดยปกติฉันคิดว่าเป็นคำตอบเมื่อได้รับการสนับสนุนด้วยการให้เหตุผล แต่ฉันคิดว่าเหตุผลนั้นเป็นไปตามความเข้าใจผิดของคำถาม
Glen_b
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.