আমি কোনও অঙ্কন, 2, 3 এবং আরও কিছু না পাওয়া পর্যন্ত কার্ড আঁকার পরে প্রত্যাশিত নম্বরটি করব


12

নিম্নলিখিতগুলি সমাধান করতে আমার কিছুটা সমস্যা হচ্ছে।

আপনি কোনও টেক্কা না পাওয়া পর্যন্ত প্রতিস্থাপন ছাড়াই একটি স্ট্যান্ডার্ড 52-কার্ড ডেক থেকে কার্ডগুলি আঁকুন। আপনি যা পান না হওয়া অবধি আপনি যা আঁকেন ২ থেকে টানুন You. আপনি চালিয়ে যান ৩. পুরো ডেকটি ফুরিয়ে যাওয়ার পরে আপনি যে প্রত্যাশিত সংখ্যাটি করবেন তা কী?

এটা স্বাভাবিক ছিল

  • Ti=first position of card whose value is i
  • Ui=last position of card whose value is i

সুতরাং সমস্যাটি মূলত ডেকে শেষ হওয়ার পরে আপনি তে থাকবেন এমন সম্ভাবনাটি নির্ধারণের সমতুল্য:k

Pr(T1<<TkUk+1<Tk)

আমি দেখতে পাচ্ছি

Pr(T1<<Tk)=1/k!andPr(Uk+1<Tk)=1/70

তবে আর কিছু পেলাম না ...


1
আপনি যদি আপনার প্রথম টেক্কাটি আঁকানোর সময় ইতিমধ্যে সমস্ত টি আঁকেন তবে কি হবে ? 2
গাং - মনিকা পুনরায়

"প্রত্যাশিত" সংখ্যার কি আসলেই "সম্ভাব্য" সংখ্যাটি বোঝায়?
whuber

এটি একটি আকর্ষণীয় সমস্যা, তবে আপনি "সমস্যাটি মূলত সমান" এর পরে আপনি যে গণিতগুলি লেখেন সে সম্পর্কে আমি নিশ্চিত নই। প্রথম বিবৃতিতে আপনি কি পরিবর্তে লিখতে চান ? তারপরেও, তবে আমি নিশ্চিত না যে বিবৃতিটি সঠিক কিনা। একটি ক্রম শুরু বিবেচনা করুন । আমাদের কাছে এবং তাই , তবে আমি যদি আপনার পাঠ্যের বিবরণটি সঠিকভাবে বুঝতে পারি তবে আমরা এখনও এসকে দ্বিতীয় অবস্থানে এবং তারপরে পঞ্চম স্থানে 2 বেছে নিতে পারি? এবং তাই একটি প্রয়োজনীয় শর্ত নয়? টি 1 = 2 , টি 2 = 1 টি 1 > টি 2 টি 1 < টি 22AAA2T1=2,T2=1T1>T2T1<T2
টুটোনে

@ টোটোন ওহ, আমি বলতে চাইছি you আপনার মতো বলেছেন, এবং আপনি ঠিক বলেছেন; কোনও প্রয়োজনীয় শর্ত নয় ...টি 1 < টি 2T1<T2
বিল

@ গুং সেক্ষেত্রে আপনার ডেক ফুরিয়ে যাবে এবং আপনি এখনও ২
বিল

উত্তর:


0

@ গুং এর ধারণার অনুসরণ করে, আমি বিশ্বাস করি যে প্রত্যাশিত মানটি হবে ৫.৮৪? এবং মন্তব্যগুলির আমার ব্যাখ্যা থেকে, আমি ধরে নিচ্ছি যে "এ" প্রায় অসম্ভব মান (যদি ডেকের শেষ চারটি কার্ড সমস্ত একস না হয়)। এখানে একটি 100,000 পুনরাবৃত্তি মন্টি কার্লো সিমুলেশনের ফলাফল রয়েছে

results
    2     3     4     5     6     7     8     9     J     K     Q     T 
 1406  7740 16309 21241 19998 15127  9393  4906   976   190   380  2334 

আপনি আর এটি খেলতে চান সে ক্ষেত্রে আর কোডটি এখানে রয়েছে ..

# monte carlo card-drawing functions from here
# http://streaming.stat.iastate.edu/workshops/r-intro/lectures/5-Rprogramming.pdf

# create a straightforward deck of cards
create_deck <-
    function( ){
        suit <- c( "H" , "C" , "D" , "S" )
        rank <- c( "A" , 2:9 , "T" , "J" , "Q" , "K" )
        deck <- NULL
        for ( r in rank ) deck <- c( deck , paste( r , suit ) )
        deck
    }

# construct a function to shuffle everything
shuffle <- function( deck ){ sample( deck , length( deck ) ) }

# draw one card at a time
draw_cards <-
    function( deck , start , n = 1 ){
        cards <- NULL

        for ( i in start:( start + n - 1 ) ){
            if ( i <= length( deck ) ){
                cards <- c( cards , deck[ i ] )
            }
        }

        return( cards )
    }

# create an empty vector for your results
results <- NULL

# run your simulation this many times..
for ( i in seq( 100000 ) ){
    # create a new deck
    sdeck <- shuffle( create_deck() )

    d <- sdeck[ grep('A|2' , sdeck ) ]
    e <- identical( grep( "2" , d ) , 1:4 )

    # loop through ranks in this order
    rank <- c( "A" , 2:9 , "T" , "J" , "Q" , "K" )

    # start at this position
    card.position <- 0

    # start with a blank current.draw
    current.draw <- ""

    # start with a blank current rank
    this.rank <- NULL

    # start with the first rank
    rank.position <- 1

    # keep drawing until you find the rank you wanted
    while( card.position < 52 ){

        # increase the position by one every time
        card.position <- card.position + 1

        # store the current draw for testing next time
        current.draw <- draw_cards( sdeck , card.position )

        # if you draw the current rank, move to the next.
        if ( grepl( rank[ rank.position ] , current.draw ) ) rank.position <- rank.position + 1

        # if you have gone through every rank and are still not out of cards,
        # should it still be a king?  this assumes yes.
        if ( rank.position == length( rank ) ) break        

    }

    # store the rank for this iteration.
    this.rank <- rank[ rank.position ]

    # at the end of the iteration, store the result
    results <- c( results , this.rank )

}

# print the final results
table( results )

# make A, T, J, Q, K numerics
results[ results == 'A' ] <- 1
results[ results == 'T' ] <- 10
results[ results == 'J' ] <- 11
results[ results == 'Q' ] <- 12
results[ results == 'K' ] <- 13
results <- as.numeric( results )

# and here's your expected value after 100,000 simulations.
mean( results )

Aঅসম্ভব কেন ? AAAAউদাহরণস্বরূপ অনুসরণ করা 48 কার্ডের ক্রম বিবেচনা করুন ।
টুটোনে

আপনি ঠিক বলেছেন .. এটি 270725 এর মধ্যে একটি - বা আর কোড সহ1/prod( 48:1 / 52:5 )
অ্যান্টনি দামিকো

1
এই উত্তরটি ভুল। "2" এর জন্য গণনা বিবেচনা করুন: কারণ এটি তখনই ঘটতে পারে যখন 1 এর দশকের আগে সমস্ত 2 এর মুখোমুখি হয়, এর সম্ভাবনা প্রতি এবং তাই আপনার অনুকরণে এর প্রত্যাশা স্ট্যান্ডার্ড ত্রুটির সাথে । আপনার আউটপুটটি ছয়টি স্ট্যান্ডার্ড ত্রুটির বেশি, এটি প্রায় অবশ্যই ভ্রান্ত হয়ে উঠেছে। গড়ের জন্য একটি সঠিক মান ( পুনরাবৃত্তির সাথে একটি ভিন্ন সিমুলেশনের উপর ভিত্তি করে ) । (84)=7037.51660 খ্রিস্টাব্দে1065.833±0,004105/(84)1428.637.516601065.833±0.004
হোবার

1
দুর্ভাগ্যক্রমে আপনার ভারী-ডকুমেন্টেড কোডটি এটি হওয়া দরকারের চেয়ে কয়েকগুণ বেশি এবং ধীর। আমি দেখিয়েছি এর আউটপুটটি ভুল; যদিও আমি ইচ্ছা করি আপনার কোডটি ডিবাগ করার সময় আমার হাতে ছিল না এবং এটি করা আমার কাজ নয়। আমার যুক্তিটি হ'ল: আপনি এখনও "2" এর শেষে কাজ করবেন যদি এবং সমস্ত "2" এর সমস্ত "এ" এর আগে থাকে তবেই। চার "2" গুলি এবং চার "এ" গুলি সজ্জিত করার সমানভাবে সম্ভাব্য উপায়গুলির মধ্যে এর মধ্যে ঠিক তাদের মধ্যে একটি এই মানদণ্ডকে সন্তুষ্ট করে। সুতরাং "2" শিরোনামের অধীনে আপনার মান কাছাকাছি হওয়া উচিত , তবে তা নয়। 105/70=1429(4+44)=70results105/70=1429
হোবার

1
এমনকি মডারেটররা অন্যান্য লোকের ভোট :-) অপসারণ করতে পারে না। একটি চি-স্কোয়ার পরীক্ষা এখন আপনার ফলাফলগুলি আমার সাথে একমত হওয়ার পরামর্শ দেয় তবে আপনি কীভাবে আপনার সিমুলেশনটি পরীক্ষা করেছিলেন তা জেনে ভাল লাগবে কারণ এটি আপনার উত্তরের উপর আস্থা বাড়িয়ে তুলবে। প্রকৃতপক্ষে, আপনি নিজের উত্তরের প্রথম অনুচ্ছেদে তৈরি সম্পাদনা অনুসারে, এখন আমাদের উভয় ফলাফলই ভুল: আমি যেমন আপনার প্রশ্নের ব্যাখ্যা করেছি, তখনও সমস্ত কার্ড শেষ হয়ে গেলে কোনও টেক্কা নিয়ে কাজ করা কখনই সম্ভব নয়।
হোবার

7

একটি সিমুলেশন জন্য এটি দ্রুত এবং সঠিক হিসাবে সঠিক হওয়া গুরুত্বপূর্ণ । এই উভয় উদ্দেশ্যই কোডিং লিখনকে পরামর্শ দেয় যা প্রোগ্রামিং পরিবেশের মূল ক্ষমতাগুলি এবং সেইসাথে সংক্ষিপ্ত এবং সহজ হিসাবে সহজ কোডকে লক্ষ্য করে, কারণ সরলতা ndsণ দেয় স্বচ্ছতা এবং স্পষ্টতা নির্ভুলতার প্রচার করে। এখানে উভয় অর্জনের জন্য আমার প্রচেষ্টা R:

#
# Simulate one play with a deck of `n` distinct cards in `k` suits.
#
sim <- function(n=13, k=4) {
  deck <- sample(rep(1:n, k)) # Shuffle the deck
  deck <- c(deck, 1:n)        # Add sentinels to terminate the loop
  k <- 0                      # Count the cards searched for
  for (j in 1:n) {
    k <- k+1                          # Count this card
    deck <- deck[-(1:match(j, deck))] # Deal cards until `j` is found
    if (length(deck) < n) break       # Stop when sentinels are reached
  }
  return(k)                   # Return the number of cards searched
}

এটিকে প্রজননযোগ্য উপায়ে প্রয়োগ করা replicateএলোমেলো সংখ্যা বীজ নির্ধারণের পরে ফাংশন দিয়ে করা যেতে পারে

> set.seed(17);  system.time(d <- replicate(10^5, sim(13, 4)))
   user  system elapsed 
   5.46    0.00    5.46

এটি ধীর, তবে পর্যাপ্ত দীর্ঘ (এবং তাই সুনির্দিষ্ট) সিমুলেশনগুলি অপেক্ষা না করে বারবার করার জন্য যথেষ্ট দ্রুত। আমরা ফলাফলটি প্রদর্শন করতে পারি এমন বেশ কয়েকটি উপায় রয়েছে। এর অর্থ দিয়ে শুরু করা যাক:

> n <- length(d)
> mean(d)
[1] 5.83488

> sd(d) / sqrt(n)
[1] 0.005978956

দ্বিতীয়টি হ'ল স্ট্যান্ডার্ড ত্রুটি: আমরা প্রত্যাশিত গড়টি সত্য মানের দুটি বা তিনটি এসই এর মধ্যে হবে বলে আশা করি। যে মধ্যে সত্য প্রত্যাশা কোথাও স্থাপন এবং5.8535.8175.853

আমরা ফ্রিকোয়েন্সিগুলির একটি সারণী (এবং তাদের স্ট্যান্ডার্ড ত্রুটিগুলি) দেখতেও চাই । নিম্নলিখিত কোডটি কিছুটা ট্যাবুলেশনকে পূর্বরূপ দেয়:

u <- table(d)
u.se <- sqrt(u/n * (1-u/n)) / sqrt(n)
cards <- c("A", "2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K")
dimnames(u) <- list(sapply(dimnames(u), function(x) cards[as.integer(x)]))
print(rbind(frequency=u/n, SE=u.se), digits=2)

এখানে ফলাফল:

                2       3      4      5      6      7       8       9       T       J       Q       K
frequency 0.01453 0.07795 0.1637 0.2104 0.1995 0.1509 0.09534 0.04995 0.02249 0.01009 0.00345 0.00173
SE        0.00038 0.00085 0.0012 0.0013 0.0013 0.0011 0.00093 0.00069 0.00047 0.00032 0.00019 0.00013

আমরা কীভাবে জানতে পারি যে সিমুলেশনটিও সঠিক? একটি উপায় হ'ল ছোট সমস্যাগুলির জন্য এটি সম্পূর্ণরূপে পরীক্ষা করা। এই কারণে এই কোডটি সমস্যার একটি ছোট্ট সাধারণীকরণ আক্রমণ করার জন্য লেখা হয়েছিল, স্বতন্ত্র কার্ডের সাথে এবং স্যুটের পরিবর্তে । যাইহোক, পরীক্ষার জন্য কোডটি একটি পূর্বনির্ধারিত ক্রমে ডেক খাওয়ানো সক্ষম হওয়া জরুরী। আসুন একই অ্যালগোরিদমকে কিছুটা আলাদা ইন্টারফেস লিখি:413n4k

draw <- function(deck) {
  n <- length(sentinels <- sort(unique(deck)))
  deck <- c(deck, sentinels)
  k <- 0
  for (j in sentinels) {
    k <- k+1
    deck <- deck[-(1:match(j, deck))]
    if (length(deck) < n) break
  }
  return(k)
}

( সর্বত্রের drawজায়গায় এটি ব্যবহার করা সম্ভব sim, তবে শুরুতে অতিরিক্ত কাজ করা drawএটিকে দ্বিগুণ হিসাবে ধীর করে দেয় sim))

আমরা এটি প্রদত্ত ডেকের প্রতিটি স্বতন্ত্র শফলে প্রয়োগ করে এটি ব্যবহার করতে পারি । যেহেতু এখানে উদ্দেশ্যটি কেবল কয়েকটি এক-অফ পরীক্ষা, তাই এই শ্যাফেলগুলি তৈরিতে দক্ষতা গুরুত্বহীন। এখানে দ্রুত প্রাণঘাতী বলের উপায় রয়েছে:

n <- 4 # Distinct cards
k <- 2 # Number of suits
d <- expand.grid(lapply(1:(n*k), function(i) 1:n))
e <- apply(d, 1, function(x) var(tabulate(x))==0)
g <- apply(d, 1, function(x) length(unique(x))==n)
d <- d[e & g,]

এখন dএকটি ডেটা ফ্রেম যার সারিগুলিতে সমস্ত বদলানো রয়েছে। drawপ্রতিটি সারিতে প্রয়োগ করুন এবং ফলাফলগুলি গণনা করুন:

d$result <- apply(as.matrix(d), 1, draw)
    (counts <- table(d$result))

আউটপুট (যা আমরা মুহূর্তের জন্য একটি আনুষ্ঠানিক পরীক্ষায় ব্যবহার করব) হ'ল

   2    3    4 
 420  784 1316 

(এর মান সহজ বুঝতে প্রণালী দ্বারা হল: আমরা এখনও কার্ডে কাজ হবে যদি এবং কেবল যদি সব দুই দুই (দুই মামলা রয়েছে এমন সমস্ত টেক্কা পূর্বে এই ঘটনাকেই সম্ভাবনা) হয়। । স্বতন্ত্র পরিবর্তনগুলির মধ্যে এই সম্পত্তি রয়েছে))2 1 / ( 2 + 2420225202520/6=4201/(2+22)=1/625202520/6=420

আমরা চ-স্কোয়ার টেস্ট দিয়ে আউটপুট পরীক্ষা করতে পারি। এই লক্ষ্যে আমি স্যুটে স্বতন্ত্র কার্ডের ক্ষেত্রে বার প্রয়োগ করেছি :sim এন = 4 কে = 210,000n=4k=2

>set.seed(17)
>d.sim <- replicate(10^4, sim(n, k))
>print((rbind(table(d.sim) / length(d.sim), counts / dim(d)[1])), digits=3)

         2     3     4
[1,] 0.168 0.312 0.520
[2,] 0.167 0.311 0.522

> chisq.test(table(d.sim), p=counts / dim(d)[1])

    Chi-squared test for given probabilities

data:  table(d.sim) 
X-squared = 0.2129, df = 2, p-value = 0.899

যেহেতু এত বেশি, আমরা কী বলে এবং সম্পূর্ণরূপে গণনা দ্বারা গণনা করা মানগুলির মধ্যে কোনও উল্লেখযোগ্য পার্থক্য খুঁজে পাই না । এবং এর কিছু অন্যান্য (ছোট) মানগুলির জন্য এই অনুশীলনটির পুনরাবৃত্তি তুলনীয় ফলাফল তৈরি করে, যখন এবং প্রয়োগ করার সময় আমাদের বিশ্বাসের যথেষ্ট কারণ প্রদান করে ।এন কে এন = 13 কে = 4psimnksimn=13k=4

শেষ অবধি, একটি দ্বি-নমুনা চি-স্কোয়ার্ড পরীক্ষাsim আউটপুটকে অন্য উত্তরে রিপোর্ট করা আউটপুটটির সাথে তুলনা করবে :

>y <- c(1660,8414,16973,21495,20021,14549,8957,4546,2087,828,313,109)
>chisq.test(cbind(u, y))

data:  cbind(u, y) 
X-squared = 142.2489, df = 11, p-value < 2.2e-16

প্রচুর চি-স্কোয়ার স্ট্যাটিস্টিক একটি পি-মান তৈরি করে যা মূলত শূন্য: সন্দেহ ছাড়াই, simঅন্য উত্তরের সাথে একমত নন। দ্বিমতের দুটি সম্ভাব্য রেজোলিউশন রয়েছে: এই উত্তরগুলির একটি (বা উভয়!) ভুল বা তারা প্রশ্নের বিভিন্ন ব্যাখ্যা কার্যকর করে। উদাহরণস্বরূপ, আমি সর্বশেষ কার্ডটি পর্যবেক্ষণ করার পরে "ডেক শেষ হওয়ার পরে" অর্থ ব্যাখ্যা করেছি এবং যদি অনুমতিযোগ্য হয় তবে প্রক্রিয়াটি শেষ করার আগে "আপনি যে নম্বরটি চালু থাকবেন" আপডেট করে যাবেন। সম্ভবত এই শেষ পদক্ষেপটি নেওয়া উচিত ছিল না। সম্ভবত ব্যাখ্যার এ জাতীয় কিছু সূক্ষ্ম তফাতটি দ্বিমতকে ব্যাখ্যা করবে, কোন পর্যায়ে আমরা জিজ্ঞাসা করা হচ্ছে যে এটি কী জিজ্ঞাসিত হচ্ছে তা পরিষ্কার করে দেওয়ার জন্য।


4

একটি সঠিক উত্তর আছে (একটি ম্যাট্রিক্স পণ্য আকারে, নীচে 4 পয়েন্টে উপস্থাপিত)। এটি গণনা করার জন্য যুক্তিসঙ্গতভাবে দক্ষ অ্যালগরিদম রয়েছে যা এই পর্যবেক্ষণগুলি থেকে প্রাপ্ত:

  1. কার্ডগুলির একটি এলোমেলো শফেল এলোমেলোভাবে কার্ডগুলি সাফ করে এবং তারপরে এলোমেলোভাবে তাদের মধ্যে থাকা কার্ডগুলিকে ছেদ করে তৈরি করা যায়।এন কেN+kNk

  2. কেবলমাত্র টেকসই পরিবর্তন করে এবং তারপরে (প্রথম পর্যবেক্ষণ প্রয়োগ করে) দু'টি ছেদ করে, তারপরে ত্রিশ ইত্যাদি, এই সমস্যাটিকে তেরো ধাপের শৃঙ্খলা হিসাবে দেখা যেতে পারে।

  3. আমরা যে কার্ডটির সন্ধান করছি তার চেয়ে বেশি আমাদের নজর রাখা দরকার। এটি করার সময়, আমাদের অবশ্যই সমস্ত কার্ডের তুলনায় চিহ্নের অবস্থানের জন্য অ্যাকাউন্ট করতে হবে না, তবে কেবল সমান বা ছোট মানের কার্ডের সাথে সম্পর্কিত এটির অবস্থান।

    প্রথম এসকে একটি চিহ্ন রেখে কল্পনা করুন এবং তারপরে পাওয়া প্রথম দুটি চিহ্নিত করুন এবং আরও অনেক কিছু। (যদি আমরা বর্তমানে যে কার্ডটি খুঁজছি তা প্রদর্শন না করে যদি কোনও পর্যায়ে ডেকটি সঞ্চালিত হয়, তবে আমরা সমস্ত কার্ডকে চিহ্ন ছাড়াই রেখে দেব)) প্রতিটি চিহ্নের "স্থান" (যখন এটি উপস্থিত থাকে) সমান বা নিম্ন মানের কার্ডের সংখ্যা হতে দিন চিহ্নটি তৈরি করার সময় ডিল করা হয়েছিল (চিহ্নিত কার্ড নিজেই সহ)। জায়গাগুলিতে সমস্ত প্রয়োজনীয় তথ্য রয়েছে।

  4. চিহ্নটি তৈরি করার পরে স্থানটি একটি এলোমেলো সংখ্যা। প্রদত্ত ডেকের জন্য, এই জায়গাগুলির ক্রম স্টোকাস্টিক প্রক্রিয়া তৈরি করে। এটি আসলে একটি মার্কভ প্রক্রিয়া (পরিবর্তনশীল ট্রানজিশন ম্যাট্রিক্স সহ)। একটি সঠিক উত্তর তাই বারো ম্যাট্রিক্স গুণ থেকে গণনা করা যেতে পারে।ith

এই ধারনা ব্যবহার করে, এই মেশিন সংগ্রহ মান মধ্যে (ডবল স্পষ্টতা ফ্লোটিং পয়েন্ট মধ্যে কম্পিউটিং) দ্বিতীয়। সঠিক মান দেখানো সমস্ত সংখ্যার সাথে সঠিক।1 / 9 19826005792658947850269453319689390235225425695.83258855290199651/9

1982600579265894785026945331968939023522542569339917784579447928182134345929899510000000000

এই পোস্টের বাকী বিশদ সরবরাহ করে, একটি কার্যকরী বাস্তবায়ন উপস্থাপিত করে (ইন R), এবং প্রশ্ন এবং সমাধানটির দক্ষতা সম্পর্কে কিছু মন্তব্য সহ শেষ হয়।


একটি ডেক এর এলোমেলো shuffles উত্পাদন

এটা আসলে ধারণার দিক থেকে পরিষ্কার আর একটি "ডেক" বিবেচনা গাণিতিকভাবে জটিল (ওরফে multiset ) এর কার্ড যার আছে সর্বনিম্ন মূল্যমানের, পরবর্তী সর্বনিম্ন এর, ইত্যাদি । (জিজ্ঞাসা করা প্রশ্নটি ভেক্টর দ্বারা নির্ধারিত ডেককে উদ্বেগযুক্ত করে )কে 1 কে 2 13 ( 4 , 4 , , 4 )N=k1+k2++kmk1k213(4,4,,4)

কার্ডগুলির একটি "এলোমেলো পরিবর্তন" হ'ল থেকে অভিন্ন এবং এলোমেলোভাবে নেওয়া এক অনুমান এর একাধিক বিন্যাসন কার্ড। এই পরিবর্তনগুলি সমতুল্য কনফিগারেশনের গোষ্ঠীতে পড়ে কারণ তাদের মধ্যে "এসেস" অনুমতি দেওয়ার ফলে কিছুই পরিবর্তন হয় না, কে "দ্বিগুণ" কে নিজেদের মধ্যে অনুমতি কিছু পরিবর্তন করে না ইত্যাদি so সুতরাং কার্ডের স্যুটগুলি অগ্রাহ্য করা হলে অভিন্ন দেখায় এমন প্রতিটিএকাধিক বিন্যাসন। এই গোষ্ঠীগুলি, যার সংখ্যাটি সুতরাং বহুজাতিক গুণাগুণ দ্বারা দেওয়া হয়েছেএন ! = এন × ( এন - 1 ) × × 2 × 1 এন কে 1 কে 2 কে 1 ! × কে 2 ! × × মি !NN!=N×(N1)××2×1Nk1k2k1!×k2!××km!

(Nk1,k2,,km)=N!k1!k2!km!,

ডেকে "সংযুক্তি" বলা হয়।

কম্বিনেশনগুলি গণনা করার আরও একটি উপায় রয়েছে। প্রথম কার্ডগুলি কেবল গঠন করতে পারে সংমিশ্রণ। তারা কে "স্লট" তাদের কাছাকাছি এবং আশেপাশে ফেলে রাখে যাতে পরবর্তী কে কার্ড স্থাপন করা যায়। আমরা একটি ডায়াগ্রাম যেখানে "এর সাথে এই ইঙ্গিত করতে পারে " এক মনোনীত কার্ড এবং " " একটি স্লট যে মধ্যবর্তী ধরে রাখতে পারেন designates এবং অতিরিক্ত কার্ড:কে 1 ! / কে 1 ! = 1 কে 1 + 1 কে 2কে 1 _ 0 কে 2k1k1!/k1!=1k1+1k2k1_0k2

_____k1 stars

যখন কে 2 অতিরিক্ত কার্ড তখন তারার ধরণ এবং নতুন কার্ডগুলি কে কে 2 কার্ডগুলিকে দুটি বিভক্ত করে । স্বতন্ত্র যেমন সাব-সেট নির্বাচন সংখ্যা ।কে 1 + কে 2 ( কে 1 + কে 2)k2k1+k2(k1+k2k1,k2)=(k1+k2)!k1!k2!

" " দিয়ে এই পদ্ধতিটি পুনরাবৃত্তি করা হচ্ছে আমরা দেখতে পেয়েছি প্রথম কার্ডের মধ্যে করার উপায়সুতরাং এই পদ্ধতিতে প্রথম কার্ডগুলি সাজানোর জন্য পৃথক পৃথক উপায়ে মোট সংখ্যা সমান( ( কে 1 + কে 2 ) + কে 3k3কে1+কে2কে1+কে2+কে3((k1+k2)+k3k1+k2,k3)=(k1+k2+k3)!(k1+k2)!k3!k1+k2k1+k2+k3

1×(k1+k2)!k1!k2!×(k1+k2+k3)!(k1+k2)!k3!=(k1+k2+k3)!k1!k2!k3!.

গত শেষে কার্ড এবং এই telescoping ভগ্নাংশ গুন অব্যাহত, আমরা যে প্রাপ্ত স্বতন্ত্র সমন্বয় সংখ্যা সমন্বয় মোট সংখ্যা সমান হিসাবে পূর্বে, গণনা । অতএব আমরা কোন সংমিশ্রণ উপেক্ষা করেছি। এর অর্থ হ'ল কার্ডগুলি বদলানোর এই ধারাবাহিক প্রক্রিয়াটি প্রতিটি সংমিশ্রণের সম্ভাব্যতাগুলি সঠিকভাবে ধারণ করে, ধরে নেওয়া যায় যে প্রতিটি পর্যায়ে পুরানোদের মধ্যে নতুন কার্ডকে ছেদ করার প্রতিটি স্বতন্ত্র পদ্ধতিটি সমান সমান সম্ভাবনা নিয়ে নেওয়া হয়।( এনkn(Nk1,k2,,km)

জায়গা প্রক্রিয়া

প্রাথমিকভাবে, এখানে কে- এসেস রয়েছে এবং স্পষ্টতই প্রথমটি চিহ্নিত করা হয়। পরবর্তী পর্যায়ে কার্ড রয়েছে, জায়গাটি (যদি একটি চিহ্নিত কার্ড উপস্থিত থাকে) সমান হয় ( থেকে মধ্য দিয়ে কিছু মান ), এবং আমরা কে- ছেদ করতে চলেছি তাদের চারপাশে কার্ড। আমরা এটির মতো একটি চিত্র দিয়ে ভিজ্যুয়ালাইজ করতে পারিk1n=k1+k2++kj1p1nk=kj

_____p1 stars____np stars

যেখানে " " বর্তমানে চিহ্নিত মনোনীত করে। শর্তসাপেক্ষ স্থান এই মান উপর , আমরা সম্ভাব্যতা আগামী জায়গা সমান হবে এটি করতে ইচ্ছুক (থেকে কিছু মান মাধ্যমে ; খেলার নিয়ম দ্বারা, পরের জায়গা পরে আসা আবশ্যক , কোথা )। যদি আমরা জানতে পারি যে ফাঁকা জায়গায় নতুন কার্ডগুলিকে ছেদ করার জন্য আরও কতগুলি উপায় রয়েছে যাতে পরের স্থানটি সমান হয় , তবে আমরা এই কার্ডগুলিকে ছেদ করার মোট উপায়ে বিভাজন করতে পারি (equal equal এর সমান , যেমনটি আমরা দেখেছি) পাওয়ার জন্যpq1n+kpqp+1kq(n+kk)স্থানান্তর সম্ভাবনা যা স্থানটি থেকে পরিবর্তিত হয় । (নতুন কার্ডগুলির মধ্যে কেউ যখন কার্ড চিহ্নিত কার্ড অনুসরণ করে না, তখন জায়গাটি পুরোপুরি অদৃশ্য হয়ে যাওয়ার জন্য স্থানান্তরিত হওয়ার সম্ভাবনাও থাকে তবে এটিকে স্পষ্টভাবে গণনা করার দরকার নেই।)pq

এই পরিস্থিতি প্রতিফলিত করার জন্য চিত্রটি আপডেট করুন:

_____p1 starss stars | ____nps stars

উল্লম্ব বার " " শো যেখানে প্রথম নতুন কার্ড হিসাবে চিহ্নিত কার্ড পরে হয়: কোন নতুন কার্ড সেইজন্য মধ্যে প্রদর্শিত হতে পারে এবং (এবং কোন স্লট যে ব্যবধান দেখানো হয়)। আমরা জানি না যে এই ব্যবধানে কয়টি তারা রয়েছে, তাই আমি সবেমাত্র এটিকে বলেছি (যা শূন্য হতে পারে) অজানা অদৃশ্য হয়ে যাবে যখন আমরা এর সাথে এবং মধ্যে সম্পর্ক খুঁজে পেয়েছি ।||ssq

ধরুন, তারপরে, আমরা এবং তারপরে - তারপরে স্বতন্ত্রভাবে তারার চারদিকে নতুন কার্ড - আমরা k প্রস্থের পরে তারের চারপাশে অবশিষ্ট নতুন কার্ড । সেখানেjkj1|

τn,k(s,p)=((p1)+jj)((nps)+(kj)1kj1)

এটি করার উপায়। লক্ষ করুন, যদিও - এটি বিশ্লেষণের সবচেয়ে জটিল অংশ - যে সমান কারণ|p+s+j+1

  • আছে বা চিহ্ন সামনে 'পুরানো' কার্ড।p
  • আছে চিহ্নটির পর কিন্তু আগে পুরাতন কার্ড ।s|
  • চিহ্ন আগে নতুন কার্ড আছে ।j
  • নিজেই উপস্থাপিত নতুন কার্ড রয়েছে ।|

সুতরাং, আমাদের স্থান থেকে স্থানান্তরিত করার তথ্য দেয় । আমরা সব সম্ভব মানের জন্য সাবধানে এই তথ্য ট্র্যাক যখন , এবং যোগফল এই সব (টুকরো করা) সম্ভাবনার ধরে, আমরা স্থান শর্তাধীন সম্ভাব্যতা প্রাপ্ত জায়গা নিম্নলিখিত ,τn,k(s,p)pq=p+s+j+1sqp

Prn,k(q|p)=(j(p1+jj)(n+kqkj1))/(n+kk)

যেখানে যোগফল থেকে শুরু হয় এবং ((এই যোগফলের পরিবর্তনশীল দৈর্ঘ্যটি বোঝায় যে বিশেষ ক্ষেত্রে ব্যতীত এবং ফাংশন হিসাবে এটির জন্য কোনও বন্ধ সূত্র হওয়ার সম্ভাবনা নেই))j=max(0,q(n+1))j=min(k1,q(p+1)n,k,q,p

অ্যালগরিদম

প্রাথমিকভাবে সম্ভাবনা যে জায়গাটি হবে এবং সম্ভাব্যতা এর অন্য কোনও সম্ভাব্য মান থাকবে । এটি কোনও ভেক্টর দ্বারা উপস্থাপন করা যেতে পারে ।1102,3,,k1p1=(1,0,,0)

পরবর্তী interspersing পর কার্ড, ভেক্টর আপডেট করা হয়েছে রূপান্তরটি ম্যাট্রিক্স দ্বারা (বাম দিকে) এটি গুন দ্বারা । সমস্ত কে কার্ড স্থাপন না করা পর্যন্ত এটি পুনরাবৃত্তি হবে । প্রতিটি পর্যায়ে , সম্ভাব্যতা ভেক্টর এর এন্ট্রিগুলির কিছু কার্ড চিহ্নিত করার সুযোগ রয়েছে has যাই হোক না কেন মান সমান করতে থাকে সেইজন্য সুযোগ যে কোন কার্ড ছেড়ে দেওয়া হয় ধাপ পরে চিহ্নিতk2p1p2(Prk1,k2(q|p),1pk1,1qk2)k1+k2++kmjpj1j। এই মানগুলির ধারাবাহিক পার্থক্য তাই আমাদের সম্ভাব্যতা দেয় যা চিহ্নিত করার জন্য আমরা টাইপ এর একটি কার্ড খুঁজে পেল না: এটি সেই কার্ডের সম্ভাব্যতা বন্টন ছিল যখন আমরা যখন খেলার শেষে ডেকটি ফুরিয়ে যাচ্ছিলাম when ।j


বাস্তবায়ন

নিম্নলিখিত Rকোডটি অ্যালগরিদম প্রয়োগ করে। এটি পূর্ববর্তী আলোচনার সমান্তরাল করে। প্রথমত, স্থানান্তর সম্ভাবনার গণনা সম্পাদন করা হয় t.matrix(with by দ্বারা বিভাগের সাথে সাধারণকরণ ছাড়াই , কোডটি পরীক্ষা করার সময় গণনাগুলি ট্র্যাক করা সহজ করে তোলে):(n+kk)

t.matrix <- function(q, p, n, k) {
  j <- max(0, q-(n+1)):min(k-1, q-(p+1))
  return (sum(choose(p-1+j,j) * choose(n+k-q, k-1-j))
}

এই দ্বারা ব্যবহৃত হয় transitionআপডেটে থেকে । এটি রূপান্তর ম্যাট্রিক্স গণনা করে এবং গুণন সম্পাদন করে। আর্গুমেন্টটি যদি খালি ভেক্টর হয় তবে এটি প্রাথমিক ভেক্টর যত্ন নেয় :pj1pjp1p

#
# `p` is the place distribution: p[i] is the chance the place is `i`.
#
transition <- function(p, k) {
  n <- length(p)
  if (n==0) {
    q <- c(1, rep(0, k-1))
  } else {
    #
    # Construct the transition matrix.
    #
    t.mat <- matrix(0, nrow=n, ncol=(n+k))
    #dimnames(t.mat) <- list(p=1:n, q=1:(n+k))
    for (i in 1:n) {
      t.mat[i, ] <- c(rep(0, i), sapply((i+1):(n+k), 
                                        function(q) t.matrix(q, i, n, k)))
    }
    #
    # Normalize and apply the transition matrix.
    #
    q <- as.vector(p %*% t.mat / choose(n+k, k))
  }
  names(q) <- 1:(n+k)
  return (q)
}

আমরা এখন যেকোন ডেকের জন্য সহজেই প্রতিটি পর্যায়ে অ-চিহ্নের সম্ভাবনাগুলি গণনা করতে পারি:

#
# `k` is an array giving the numbers of each card in order;
# e.g., k = rep(4, 13) for a standard deck.
#
# NB: the *complements* of the p-vectors are output.
#
game <- function(k) {
  p <- numeric(0)
  q <- sapply(k, function(i) 1 - sum(p <<- transition(p, i)))
  names(q) <- names(k)
  return (q)
}

এখানে তারা স্ট্যান্ডার্ড ডেকের জন্য রয়েছে:

k <- rep(4, 13)
names(k) <- c("A", 2:9, "T", "J", "Q", "K")
(g <- game(k))

আউটপুট হয়

         A          2          3          4          5          6          7          8          9          T          J          Q          K 
0.00000000 0.01428571 0.09232323 0.25595013 0.46786622 0.66819134 0.81821790 0.91160622 0.96146102 0.98479430 0.99452614 0.99818922 0.99944610

নিয়ম অনুসারে, যদি কোনও রাজা চিহ্নিত হয় তবে আমরা আর কোনও কার্ডের সন্ধান করব না: এর অর্থ এর মান বাড়াতে হবে । এটি করার পরে, পার্থক্যগুলি "ডেক শেষ হয়ে গেলে আপনি যে সংখ্যায় থাকবেন" এর বিতরণ দেয়:0.99944611

> g[13] <- 1; diff(g)
          2           3           4           5           6           7           8           9           T           J           Q           K 
0.014285714 0.078037518 0.163626897 0.211916093 0.200325120 0.150026562 0.093388313 0.049854807 0.023333275 0.009731843 0.003663077 0.001810781

(এটিকে আমি মন্টে-কার্লো সিমুলেশন বর্ণনা করে পৃথক উত্তরে রিপোর্টের আউটপুটটির সাথে তুলনা করুন: এগুলি এলোমেলো পরিবর্তনের প্রত্যাশিত পরিমাণ পর্যন্ত একইরূপে উপস্থিত হবে))

প্রত্যাশিত মানটি তাত্ক্ষণিক:

> sum(diff(g) * 2:13)
[1] 5.832589

সমস্তই বলেছিল, এটি কার্যকর করতে কার্যকর কোডের এক ডজন লাইন বা তার বেশি প্রয়োজন। আমি ( অবধি ) এর ছোট মানগুলির জন্য হাতে গণনার বিপরীতে এটি পরীক্ষা করেছি । সুতরাং, সমস্যাটির কোড এবং পূর্ববর্তী বিশ্লেষণের মধ্যে যদি কোনও তাত্পর্য স্পষ্ট হয়ে যায় তবে কোডটিকে বিশ্বাস করুন (কারণ বিশ্লেষণটিতে টাইপোগ্রাফিক ত্রুটি থাকতে পারে)।k3


মন্তব্য

অন্যান্য ক্রমগুলির সাথে সম্পর্ক Relations

যখন প্রতিটি কার্ডের মধ্যে একটি থাকে তখন বিতরণ পুরো সংখ্যার পারস্পরিক ক্রমের একটি ক্রম হয়:

> 1/diff(game(rep(1,10)))
[1]      2      3      8     30    144    840   5760  45360 403200

স্থানে মান হয়(জায়গায় থেকে শুরু )। এটি পূর্ণসংক্রমের অনলাইন এনসাইক্লোপিডিয়ায় ক্রম A001048 । তদনুসারে, আমরা আশা করতে পারি যে জন্য ধ্রুবক ("উপযুক্ত" ডেকস) রয়েছে যা এই সাধারণীকরণ করবে, যার নিজস্ব কিছু গভীর অর্থ রয়েছে। (উদাহরণস্বরূপ, এটি অনুক্রমের গ্রুপগুলিতে বৃহত্তম কনজুগেসি ক্লাসগুলির মাপ গণনা করে এবং এটি ত্রৈমাসিক সহগগুলির সাথেও সম্পর্কিত )) (দুর্ভাগ্যক্রমে, এর সাধারণীকরণের পারস্পরিক ক্রিয়াকলাপগুলি সাধারণত পূর্ণসংখ্যা হয় না))ii!+(i1)!i=1kik>1

স্টোকাস্টিক প্রক্রিয়া হিসাবে গেমটি

আমাদের বিশ্লেষণগুলি এটিকে পরিষ্কার করে দেয় যে ভেক্টর , , এর প্রাথমিক সহগ ধ্রুবক। উদাহরণস্বরূপ, আসুন আউটপুটটি ট্র্যাক করা যাক এটি কার্ডের প্রতিটি গ্রুপকে প্রক্রিয়া করে:ipjjigame

> sapply(1:13, function(i) game(rep(4,i)))

[[1]]
[1] 0

[[2]]
[1] 0.00000000 0.01428571

[[3]]
[1] 0.00000000 0.01428571 0.09232323

[[4]]
[1] 0.00000000 0.01428571 0.09232323 0.25595013

...

[[13]]
 [1] 0.00000000 0.01428571 0.09232323 0.25595013 0.46786622 0.66819134 0.81821790 0.91160622 0.96146102 0.98479430 0.99452614 0.99818922 0.99944610

উদাহরণস্বরূপ, চূড়ান্ত ভেক্টরের দ্বিতীয় মান (52 টি কার্ডের সম্পূর্ণ ডেকের সাথে ফলাফলগুলি বর্ণনা করে) ইতিমধ্যে দ্বিতীয় গ্রুপটি প্রক্রিয়া করার পরে উপস্থিত হয়েছিল (এবং সমান )। সুতরাং, আপনি যদি কার্ডের মানের মাধ্যমে কেবলমাত্র চিহ্নগুলি সম্পর্কে তথ্য চান তবে আপনাকে কেবল কে কার্ডগুলির ডেকের জন্য গণনা করতে হবে 1/(84)=1/70jthk1+k2++kj

কারণ মূল্যের একটি কার্ড উপলক্ষে না সম্ভাবনা দ্রুত পাসে হচ্ছে যেমন বেড়ে যায়, পরে চার স্যুট পরিহিত কার্ডের ধরনের আমরা প্রায় প্রত্যাশা জন্য একটি সীমিত মান পৌঁছেছেন। প্রকৃতপক্ষে, সীমাবদ্ধকরণের মানটি প্রায় ( কার্ডের একটি ডেকের জন্য গণনা করা হয়, যেখানে ডাবল স্পষ্টতা রাউন্ডিং ত্রুটি আরও এগিয়ে যাওয়া রোধ করে)।j1j135.8333554×32

টাইমিং

অ্যালগরিদম এ খুঁজছি প্রয়োগ -vector , আমরা দেখতে তার সময়জ্ঞান সমানুপাতিক হওয়া উচিত একটি অশোধিত উপরের আবদ্ধ ব্যবহার - - এবং সমানুপাতিক চেয়ে কোন খারাপ । থেকে এবং থেকে জন্য সমস্ত গণনার সময় নির্ধারণ করে এবং কেবল তুলনামূলকভাবে দীর্ঘ সময় গ্রহণকারী ( দ্বিতীয় বা তার বেশি) বিশ্লেষণ করে , আমি অনুমান করি যে গণনার সময়টি প্রায় , এই উপরের সীমা নির্ধারণকে সমর্থন করে।( , , ... , ) k 2 মি 3= 1 7 এন = 10 30 1 / 2 হে ( 2 এন 2.9 )m(k,k,,k)k2m3k=17n=10301/2O(k2n2.9)

এই অ্যাসিম্পটোটিকগুলির একটি ব্যবহার বৃহত্তর সমস্যার জন্য গণনার সময় প্রজেক্ট করা। উদাহরণস্বরূপ, প্রায় সেকেন্ড সময় লাগে তা দেখে আমরা অনুমান করতে পারি যে (খুব আকর্ষণীয়) কেস কে প্রায় সেকেন্ড। (এটি আসলে সেকেন্ড সময় নেয় ))1.31 = 1 , এন = 100 1.31 ( 1 / 4 ) 2 ( 100 / 30 ) 2.92.7 2.87k=4,n=301.31k=1,n=1001.31(1/4)2(100/30)2.92.72.87


0

পার্লে একটি সাধারণ মন্টি কার্লো হ্যাক করেছে এবং প্রায় পাওয়া গেছে ।5.8329

#!/usr/bin/perl

use strict;

my @deck = (1..13) x 4;

my $N = 100000; # Monte Carlo iterations.

my $mean = 0;

for (my $i = 1; $i <= $N; $i++) {
    my @d = @deck;
    fisher_yates_shuffle(\@d);
    my $last = 0;
        foreach my $c (@d) {
        if ($c == $last + 1) { $last = $c }
    }
    $mean += ($last + 1) / $N;
}

print $mean, "\n";

sub fisher_yates_shuffle {
    my $array = shift;
        my $i = @$array;
        while (--$i) {
        my $j = int rand($i + 1);
        @$array[$i, $j] = @$array[$j, $i];
    }
}

এটি এবং দুটি সিমুলেশন এবং একটি তাত্ত্বিক (সঠিক) একটি সহ পূর্ববর্তী সমস্ত উত্তরগুলির মধ্যে তীব্র তাত্পর্যপূর্ণতা দেখে আমি সন্দেহ করি যে আপনি প্রশ্নটিকে অন্যভাবে ব্যাখ্যা করছেন। আপনার পক্ষ থেকে কোনও ব্যাখ্যা অনুপস্থিতিতে, আমাদের কেবল এটি ভুল হিসাবে নেওয়া উচিত। (আমার সন্দেহ হয় আপনি সম্ভবত আরও কম গণনা করছেন, সেই ক্ষেত্রে আপনার 4.8 কে 5.83258 এর সাথে তুলনা করা উচিত ... তবে তারপরেও আপনার দুটি উল্লেখযোগ্য অঙ্কের সমস্যা এই সমস্যাটির জন্য কোনও অতিরিক্ত অন্তর্দৃষ্টি দেয় না))
হুবুহু

1
হাঁ! অফ-বাই-ওয়ান ভুল ছিল।
জেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.