সম্ভাবনা - আপনি কত উচ্চ যেতে পারেন?


10

আমি কীভাবে কোনও সম্ভাবনার দ্রুত এবং নির্ভুলভাবে গণনা করতে পারি তার জন্য আগে একটি প্রশ্ন জিজ্ঞাসা করেছি । তবে, সম্ভবত একটি বন্ধ ফর্ম সমাধান দেওয়া হওয়ায় এটি খুব সহজ ছিল! এখানে একটি আরও কঠিন সংস্করণ।

এই টাস্কটি সম্ভাব্যতার সঠিক এবং দ্রুত গণনা করার জন্য কোড লেখার বিষয়ে । আউটপুটটি তার সর্বাধিক হ্রাসকৃত আকারে ভগ্নাংশ হিসাবে লিখিত একটি সুনির্দিষ্ট সম্ভাবনা হওয়া উচিত। এটি কখনও কখনও আউটপুট করা উচিত 4/8নয় 1/2

কিছু ধনাত্মক পূর্ণসংখ্যার জন্য n, 1s এবং -1s দৈর্ঘ্যের একরকম এলোমেলো স্ট্রিং বিবেচনা করুন nএবং এটিকে এ কল করুন Aitself এটি A[1] = A[n+1]যদি 1 থেকে সূচীকরণ করা A[2] = A[n+2]ইত্যাদি। Aএখন দৈর্ঘ্য আছে 2n। এখন দৈর্ঘ্যের দ্বিতীয় এলোমেলো স্ট্রিং বিবেচনা করুন nযার nসম্ভাব্যতা 1 / 4,1 / 2, 1/4 সহ প্রথম মান -1, 0, বা 1 হয় এবং এটিকে বি কল করুন call

এখন ভেতরের পণ্য বিবেচনা Bসঙ্গে A[1+j,...,n+j]ভিন্ন j =0,1,2,...

উদাহরণস্বরূপ, বিবেচনা করুন n=3। সম্ভাব্য মান Aএবং Bহতে পারে A = [-1,1,1,-1,...]এবং B=[0,1,-1]। এই ক্ষেত্রে প্রথম দুটি অভ্যন্তরীণ পণ্য হ'ল 0এবং 2

কার্য

প্রত্যেকের জন্য j, দিয়ে শুরু j=1আপনার কোড আউটপুট সম্ভাব্যতা উচিত প্রথম যে j+1ভেতরের পণ্য যে জন্য শূন্য n=j,...,50

মার্টিন বাটনার দ্বারা উত্পাদিত টেবিলটি অনুলিপি করার জন্য j=1আমাদের নিম্নলিখিত নমুনার ফলাফল রয়েছে।

n   P(n)
1   1/2
2   3/8
3   7/32
4   89/512
5   269/2048
6   903/8192
7   3035/32768
8   169801/2097152

স্কোর

আপনার স্কোরটি সবচেয়ে বড় jআপনার কোডটি আমার কম্পিউটারে 1 মিনিটের মধ্যে শেষ হয়। কিছুটা স্পষ্ট করার জন্য, প্রতিটি jএক মিনিট পায়। নোট করুন যে পূর্ববর্তী লিঙ্কযুক্ত প্রশ্নের ডায়নামিক প্রোগ্রামিং কোড এটি এর জন্য সহজেই করবে j=1

টাইব্রেকার

যদি দুটি এন্ট্রি একই jস্কোর পায় তবে বিজয়ী এন্ট্রি তার nজন্য আমার মেশিনে এক মিনিটের মধ্যে সবচেয়ে বেশি হবে j। যদি দুটি সেরা এন্ট্রিও এই মানদণ্ডে সমান হয় তবে বিজয়ীর উত্তর আগে জমা দেওয়া হবে।

ভাষা ও গ্রন্থাগার

আপনি যে কোনও অবাধে উপলভ্য ভাষা এবং লাইব্রেরি ব্যবহার করতে পারেন। আমি অবশ্যই আপনার কোডটি চালাতে সক্ষম হব তাই দয়া করে আপনার কোড লিনাক্সে কীভাবে চালানো / সংকলন করা যায় তার সম্পূর্ণ ব্যাখ্যা অন্তর্ভুক্ত করুন যদি সম্ভব হয় তবে।

আমার মেশিনের সময়গুলি আমার মেশিনে চালিত হবে। এটি একটি এএমডি এফএক্স-8350 এইট-কোর প্রসেসরে একটি স্ট্যান্ডার্ড উবুন্টু ইনস্টল। এর অর্থ হল আপনার কোডটি চালাতে আমার সক্ষম হওয়া দরকার।

বিজয়ী এন্ট্রি

  • j=2মধ্যে পাইথন মিচ শোয়ার্জ দ্বারা।
  • j=2মধ্যে পাইথন feersum দ্বারা। বর্তমানে দ্রুততম এন্ট্রি।

যদি প্রশ্নটি কোনওভাবেই অস্পষ্ট থাকে তবে দয়া করে আমাকে জানান যাতে আমি এটি দ্রুত সমাধান করতে পারি।

2
আপনি এখন পর্যন্ত আমার প্রিয় প্রশ্ন জিজ্ঞাসা। তারপর আবার, আমি কম্পিউটিং মান ঠিক জন্য একটা জিনিস আছে এবং দ্রুত
প্রিমো

@ প্রিয়মো ধন্যবাদ! এর অর্থ কি আমরা আরপিথনে উত্তর আশা করতে পারি? :)

আপনি এই প্রশ্ন এবং অন্য একটি মধ্যে পার্থক্য রাখতে পারেন?
kirbyfan64sos

@ kirbyfan64sos অপরটি মূলত একই প্রশ্নটি কেবল `j = 1` এর জন্য।

উত্তর:


3

পাইথন 2, জে = 2

আমি জে = 2 এর জন্য এক ধরণের 'বদ্ধ ফর্ম' সন্ধান করার চেষ্টা করেছি। সম্ভবত আমি এটির ম্যাথজ্যাক্স চিত্র তৈরি করতে পারতাম, যদিও এটি সমস্ত সূচকের সাথে মজাদার হয়। আমি এই সূক্ষ্ম কোডটি কেবল সূত্রটি পরীক্ষা করার জন্য লিখেছি। এটি সম্পূর্ণ হতে প্রায় 1 সেকেন্ড সময় নেয়। ফলাফল মিচ শোয়ার্টজের কোডের সাথে মেলে।

ch = lambda n, k: n>=k>=0 and fac[n]/fac[k]/fac[n-k]
W = lambda l, d: ch(2*l, l+d)
P = lambda n, p: n==0 or ch(n-1, p-1)
ir = lambda a,b: xrange(a,b+1)

N = 50
fac = [1]
for i in ir(1,4*N): fac += [i * fac[-1]]

for n in ir(2, N):
    s = 0
    for i in ir(0,n+1):
     for j in ir(0,min(i,n+1-i)):
      for k in ir(0,n+i%2-i-j):
       t=(2-(k==0))*W(n+i%2-i-j,k)*W(i-(j+i%2),k)*W(j,k)**2*P(i,j+i%2)*P(n+1-i,j+1-i%2)
       s+=t
    denp = 3 * n - 1
    while denp and not s&1: denp -= 1; s>>=1
    print n, '%d/%d'%(s,1<<denp)

eA [i] == A [i + 1] বা nA [i]! = A [i + 1] হলে আইথ সদস্যটি এমন একটি ক্রম বিবেচনা করুন । iপ্রোগ্রামে nএস সংখ্যা । যদি iসমান হয় তবে ক্রমটি অবশ্যই শুরু হওয়া উচিত এবং শেষ হতে হবে e। যদি iবিজোড় হয় তবে ক্রমটি অবশ্যই শুরু হবে এবং শেষ হবে n। ধারাবাহিকতাগুলি পরপর eগুলি বা nগুলি এর সংখ্যা দ্বারা শ্রেণিবদ্ধ করা হয় । আছে j+ 1 টি এক এবং jঅন্যান্য।

যখন এলোমেলো হাটা ধারণা 3 মাত্রা বাড়ানো হয়, একটি দু: খজনক সমস্যা হেঁটে যাওয়ার 4 সম্ভব দিকনির্দেশ (প্রত্যেকের জন্য এক আছে হয় ee, en, ne, অথবা nnযা উপায়ে) তারা সুসংগত নির্ভরশীল নয়। সুতরাং kসূচকটি কোনও দিকনির্দেশে নেওয়া পদক্ষেপের সংখ্যার (1, 1, 1) পরিমাণের যোগফল। তারপরে একটি নিখুঁত পদক্ষেপ থাকবে যা এটিকে বাতিল করতে অন্যান্য 3 দিক অবলম্বন করা উচিত।

পি (এন, পি) পি অংশগুলিতে এন বস্তুর অর্ডার করা পার্টিশনের সংখ্যা দেয়। ডাব্লু (এল, ডি) একটি এলোমেলো lপদক্ষেপের যথাযথ দূরত্বে ভ্রমণ করার জন্য কয়েকটি পথ দেয় d। বাম দিকে সরানোর 1 টি সুযোগ যেমন আছে, ডান দিকে সরানোর 1 সুযোগ এবং 2 টি রাখার জন্য 2 সুযোগ রয়েছে।


ধন্যবাদ! সূত্রের একটি চিত্র সত্যিই দুর্দান্ত হবে।

ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ. আপনি এটি সহজ দেখায়! আমি আপনার মন্তব্যটি দেখেছি যে আপনি এর সমাধান করতে পারেন j=3। সেটা অনেক চমৎকার হবে!

3

পাইথন, জে = 2

পূর্ববর্তী প্রশ্নের j = 1আমার উত্তরের জন্য গতিশীল প্রোগ্রামিং পদ্ধতির উচ্চতর জন্য কাজ করার জন্য অনেকগুলি পরিবর্তন প্রয়োজন হয় না j, তবে দ্রুত ধীর হয়ে যায়। রেফারেন্সের জন্য সারণী:

n   p(n)

2   3/8
3   11/64
4   71/512
5   323/4096
6   501/8192
7   2927/65536
8   76519/2097152
9   490655/16777216
10  207313/8388608

এবং কোড:

from time import*
from fractions import*
from collections import*

def main():
    N_MAX=50

    T=time()

    n=2
    Y=defaultdict(lambda:0)
    numer=0

    for a1 in [1]:
        for b1 in (1,0):
            for a2 in (1,-1):
                for b2 in (1,0,0,-1):
                    if not a1*b1+a2*b2 and not a2*b1+a1*b2:
                        numer+=1
                    Y[(a1,a2,b1,b2,a1*b1+a2*b2,a2*b1,0)]+=1

    thresh=N_MAX-1

    while time() <= T+60:
        print('%d %s'%(n,Fraction(numer,8**n/4)))

        if thresh<2:
            print('reached N_MAX with %.2f seconds remaining'%(T+60-time()))
            return

        n+=1
        X=Y
        Y=defaultdict(lambda:0)
        numer=0

        for a1,a2,b1,b2,s,t,u in X:
            if not ( abs(s)<thresh and abs(t)<thresh+1 and abs(u)<thresh+2 ):
                continue

            c=X[(a1,a2,b1,b2,s,t,u)]

            # 1,1

            if not s+1 and not t+b2+a1 and not u+b1+a1*b2+a2: numer+=c
            Y[(a1,a2,b2,1,s+1,t+b2,u+b1)]+=c

            # -1,1

            if not s-1 and not t-b2+a1 and not u-b1+a1*b2+a2: numer+=c
            Y[(a1,a2,b2,1,s-1,t-b2,u-b1)]+=c

            # 1,-1

            if not s-1 and not t+b2-a1 and not u+b1+a1*b2-a2: numer+=c
            Y[(a1,a2,b2,-1,s-1,t+b2,u+b1)]+=c

            # -1,-1

            if not s+1 and not t-b2-a1 and not u-b1+a1*b2-a2: numer+=c
            Y[(a1,a2,b2,-1,s+1,t-b2,u-b1)]+=c

            # 1,0

            c+=c

            if not s and not t+b2 and not u+b1+a1*b2: numer+=c
            Y[(a1,a2,b2,0,s,t+b2,u+b1)]+=c

            # -1,0

            if not s and not t-b2 and not u-b1+a1*b2: numer+=c
            Y[(a1,a2,b2,0,s,t-b2,u-b1)]+=c

        thresh-=1

main()

এখানে আমরা প্রথম দুটি উপাদান সম্পর্কে অবগত থাকার হয় A, শেষ দুটি উপাদান B(যেখানে b2শেষ উপাদান), এবং অভ্যন্তরীণ পণ্য (A[:n], B), (A[1:n], B[:-1])এবং (A[2:n], B[:-2])


.... 21.20 সেকেন্ড বাকি নিয়ে N_MAX এ পৌঁছেছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.