এই "নিষ্পাপ" শিফলিং অ্যালগরিদমের সাথে কী ভুল?


23

এটি এন্টার এলোমেলোভাবে অ্যারে পরিবর্তন সম্পর্কে স্ট্যাকওভারফ্লো প্রশ্নের একটি ফলোআপ ।

এখানে প্রতিষ্ঠিত অ্যালগরিদম রয়েছে (যেমন নুথ-ফিশার-ইয়েটস সাফেল ) যা "সাদাসিধা" অ্যাড-হক বাস্তবায়নের উপর নির্ভর করার পরিবর্তে অ্যারে বদলানোর জন্য ব্যবহার করা উচিত।

আমি এখন প্রমাণ করতে আগ্রহী (বা অসম্মতি জানাই) যে আমার নিষ্পাপ আলগোরিদমটি নষ্ট হয়ে গেছে (যেমন: সমান সম্ভাবনার সাথে সমস্ত সম্ভাব্য ক্রম উত্পন্ন করে না)।

এখানে আলগোরিদিম:

কয়েকবার লুপ করুন (অ্যারের দৈর্ঘ্যটি করা উচিত) এবং প্রতিটি পুনরাবৃত্তিতে দুটি এলোমেলো অ্যারে সূচক পান এবং সেখানে দুটি উপাদানকে অদলবদল করুন।

স্পষ্টতই, কেএফওয়াইয়ের তুলনায় এর চেয়ে বেশি এলোমেলো সংখ্যার প্রয়োজন (দ্বিগুণ দ্বিগুণ), তবে সেগুলি বাদ দিয়ে কি এটি সঠিকভাবে কাজ করে? এবং পুনরাবৃত্তির উপযুক্ত সংখ্যাটি কী হবে ("অ্যারের দৈর্ঘ্য" কি যথেষ্ট)?


4
আমি কেবল বুঝতে পারি না যে লোকেরা কেন এই অদলবদলটিকে এফওয়াইয়ের চেয়ে 'সরল' বা 'আরও নির্বোধ' মনে করে ... আমি যখন প্রথমবারের মতো এই সমস্যাটি সমাধান করছিলাম তখন আমি কেবলমাত্র এফওয়াই বাস্তবায়ন করেছি (এটির একটি নামও জানা নেই) , কারণ এটি আমার কাছে এটি করার সহজতম উপায় বলে মনে হয়েছিল।

1
@ এমবিকিউ: ব্যক্তিগতভাবে, আমি এগুলি সমানভাবে সহজ মনে করি, যদিও আমি সম্মত হই যে এফওয়াইওয়ালা আমার কাছে আরও "প্রাকৃতিক" বলে মনে হয়।
নিকো

3
আমার নিজের লেখার পরে যখন আমি অ্যালগরিদমগুলিতে ঝাঁকুনি নিয়ে গবেষণা করেছি (তখন থেকেই আমি একটি অভ্যাস ছেড়ে দিয়েছি) তখন আমি সবাই "পবিত্র বোকা, এটি হয়ে গিয়েছিল, এবং এর একটি নামও আছে !!"
জেএম

উত্তর:


12

এটি ভেঙে গেছে, যদিও আপনি যথেষ্ট পরিমাণে শফলেস সম্পাদন করলে এটি একটি দুর্দান্ত আনুমানিকতা হতে পারে (আগের উত্তরগুলি সূচিত হিসাবে)।

কী চলছে তার একটি হ্যান্ডেল পেতে, আপনার অ্যালগরিদম কতবার একটি এলিমেন্ট অ্যারের শ্যাফেল উত্পন্ন করবে তা বিবেচনা করুন যেখানে প্রথম উপাদানটি স্থির করা হয়েছে, । সমমানের সম্ভাব্যতা সহ যখন ক্রমানুসরণ উত্পন্ন হয় , তখন এটি সময়ের হওয়া উচিত । যাক পরে এই সংঘটন আপেক্ষিক ফ্রিকোয়েন্সি হতে আপনার আলগোরিদিম সঙ্গে shuffles। আসুন আমরাও উদার হয়ে উঠি এবং ধরা যাক আপনি আসলে আপনার শ্যাফলের জন্য এলোমেলোভাবে স্বতন্ত্র জোড় সূচকগুলি বেছে নিচ্ছেন, যাতে প্রতিটি জুটি সম্ভাব্যতার সাথে নির্বাচিত হয় =কে 2 1 / কে পি এন এন 1 / ( কে21/পিএনএন 2/(কে(কে-1))1/(2)2/(k(k1))। (এর অর্থ এখানে কোনও "তুচ্ছ" শ্যাফলগুলি নষ্ট হয় না অন্যদিকে, এটি সম্পূর্ণভাবে একটি দ্বি-উপাদান অ্যারের জন্য আপনার অ্যালগরিদমকে ভেঙে দেয়, কারণ আপনি দুটি উপাদানকে ঠিক করার এবং সেগুলি অদলবদলের মধ্যে বিকল্প, সুতরাং যদি আপনি পূর্বনির্ধারিত সংখ্যার পরে থামেন তবে পদক্ষেপ, ফলাফল যা আছে তা নিয়ে কোনও এলোমেলোতা নেই!)

এই ফ্রিকোয়েন্সিটি একটি সহজ পুনরাবৃত্তি সন্তুষ্ট করে, কারণ প্রথম উপাদানটি দুটি ভিন্ন ভিন্ন উপায়ে বদলে দেওয়ার পরে তার মূল জায়গায় পাওয়া যায় in একটি হ'ল এটি শফলেসের পরে স্থির হয়েছিল এবং পরবর্তী শিফেলটি প্রথম উপাদানটি সরায় না। অন্যটি হ'ল এটি শফলেস পরে সরানো হয়েছিল তবে শিফেল এটিকে পিছনে সরিয়ে দেয়। প্রথম উপাদানটি না সরানোর সুযোগটি = নেওয়ার সমান হয়, যখন প্রথম উপাদানটিকে পিছনে স্থানান্তরিত করার সুযোগ সমান হয় = । কোথা থেকে:এন এন এন + 1 এস টি ( কে - 1)এন+ +1এনএনএন+ +1গুলিটি (কে-2)/কে1/ ( কে(k12)/(k2)(k2)/k 2/(কে(কে-1))1/(k2)2/(k(k1))

p0=1
কারণ প্রথম উপাদানটি তার যথাযথ জায়গায় শুরু হয়;

pn+1=k2kpn+2k(k1)(1pn).

সমাধানটি হ'ল

pn=1/k+(k3k1)nk1k.

বিয়োগ , আমরা দেখতে যে ফ্রিকোয়েন্সি দ্বারা ভুল । লার্জ এবং একটি ভাল অনুমান। । এটি দেখায় যে অ্যারে ( ) এর আকারের সাথে সম্পর্কিত swaps এর সংখ্যার সাথে এই নির্দিষ্ট ফ্রিকোয়েন্সিতে ত্রুটি দ্রুত হ্রাস পাবে , ইঙ্গিত করে যে আপনি যদি তুলনামূলকভাবে বড় সংখ্যক অদলবদল করে থাকেন তবে বড় অ্যারেগুলি সনাক্ত করা কঠিন হবে - তবে ত্রুটি সর্বদা থাকে।( কে - 3)1/k কেএনকে-1(k3k1)nk1knএন/কেk1kexp(2nk1)n/k

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

n>12(1(k1)log(ϵ))

যেখানে তুলনায় খুব ছোট হওয়া উচিত । এর অর্থ বেশ কয়েকবার হওয়া উচিত এমনকি প্রভাবের অশোধিত অনুমান জন্য ( অর্থাত , যেখানে ক্রম হয় বার তাই।)1 / কে এন কে ϵ 0.01 1 / কেϵ1/knkϵ0.011/k

এই সমস্তই প্রশ্নটি জাগায়: আপনি কেন এমন একটি অ্যালগরিদম ব্যবহার করতে বেছে নেবেন যা পুরোপুরি সঠিক নয় (তবে প্রায় আনুমানিক) সঠিক, ঠিক একই ধরণের কৌশলগুলি অন্য একটি অ্যালগরিদমের মতো নিয়োগ করে যা প্রমাণিতভাবে সঠিক, এবং তবুও যার জন্য আরও গণনা প্রয়োজন?

সম্পাদন করা

থিলোর মন্তব্য যথাযথ (এবং আমি আশা করছিলাম যে কেউ এটিকে নির্দেশ করবে না, তাই এই অতিরিক্ত কাজটি থেকে আমাকে বাঁচানো যেতে পারে!)। আমাকে যুক্তি ব্যাখ্যা করতে দিন।

  • আপনি যদি প্রতিবার আসল সোয়াপগুলি তৈরির বিষয়টি নিশ্চিত করে থাকেন তবে আপনি সম্পূর্ণরূপে জটিল হয়ে উঠছেন। কেস কেসের ক্ষেত্রে আমি যে সমস্যাটি দেখিয়েছি তা সমস্ত অ্যারে পর্যন্ত প্রসারিত। এমনকি সংখ্যক অদলবদল প্রয়োগ করে সমস্ত সম্ভাব্য অনুমতিগুলির অর্ধেক প্রাপ্তি পাওয়া যায়; অন্য অর্ধেকটি একটি বিজোড় সংখ্যার অদলবদল প্রয়োগ করে প্রাপ্ত হয়। সুতরাং, এই পরিস্থিতিতে, আপনি আদেশের অভিন্ন বিতরণের কাছাকাছি কোথাও কখনই উত্পন্ন করতে পারবেন না (তবে এমন অনেকগুলি সম্ভাবনা রয়েছে যে কোনও আকারের জন্য সিমুলেশন অধ্যয়ন সমস্যাটি সনাক্ত করতে অক্ষম হবে)। এটা সত্যিই খারাপ।কেk=2k

  • অতএব এলোমেলোভাবে দুটি পদ স্বাধীনভাবে উত্পাদন করে এলোমেলোভাবে অদলবদল তৈরি করা বুদ্ধিমানের কাজ। এর অর্থ প্রতিটি উপাদানকে নিজের সাথে অদলবদলের জন্য সুযোগ থাকে; যা কিছুই করার নয়। এই প্রক্রিয়াটি কার্যকরভাবে অ্যালগরিদমকে কিছুটা কমিয়ে দেয়: পদক্ষেপের পরে , আমরা কেবলমাত্র সত্যিকারের অদলবদল হবে বলে আশা করি।এন কে - 11/knk1kN<N

  • লক্ষ্য করুন যে ত্রুটিটির আকার স্বতন্ত্র স্ব্যাপের সংখ্যা সহ একঘেয়েভাবে হ্রাস পায়। সুতরাং, গড়ে কম অদলবদল করাও গড়ে ত্রুটি বৃদ্ধি করে। তবে এটি এমন একটি মূল্য যা প্রথম বুলেটে বর্ণিত সমস্যাটি কাটিয়ে উঠতে আপনার অর্থ দিতে আগ্রহী। ফলস্বরূপ, আমার ত্রুটির অনুমান রক্ষণশীলভাবে কম, প্রায় এর একটি উপাদান দ্বারা ।(k1)/k

আমি একটি আকর্ষণীয় আপাত ব্যতিক্রমও নির্দেশ করতে চেয়েছিলাম: ত্রুটির সূত্রটি ঘনিষ্ঠভাবে পর্যালোচনা করে বোঝায় যে ক্ষেত্রে কোনও ত্রুটি নেই । এটি কোনও ভুল নয়: এটি সঠিক। যাইহোক, এখানে আমি আদেশের অভিন্ন বিতরণ সম্পর্কিত একটি মাত্র পরিসংখ্যান পরীক্ষা করেছি। অ্যালগরিদম যখন এই এক পরিসংখ্যানকে পুনরুত্পাদন করতে পারে তখন (যথা, কোনও নির্দিষ্ট অবস্থান নির্ধারিত ক্রমের যথাযথ ফ্রিকোয়েন্সি পাওয়া) অনুমতিটির সত্যতা সমানভাবে বিতরণ করা গ্যারান্টি দেয় না। প্রকৃতপক্ষে, প্রকৃত অদলবদলের পরে , কেবলমাত্র একমাত্র সম্ভাব্য আদেশগুলি , উত্পাদিত হতে পারেk=3k=32n(123)(321), এবং পরিচয়। কেবলমাত্র পরেরটি কোনও প্রদত্ত অবস্থান স্থির করে, তাই প্রকৃত অর্থে এক তৃতীয়াংশ অবস্থান নির্ধারণ করে। তবে অর্ধেক ক্রম অনুপস্থিত! অন্য ক্ষেত্রে, আসল স্বাপের পরে, একমাত্র সম্ভাব্য ক্রম , এবং । আবার, এর মধ্যে ঠিক কোনও একটি নির্ধারিত অবস্থান ঠিক করে দেবে, সুতরাং আবার আমরা সেই অবস্থানটি স্থির করার জন্য যথাযথ ক্রমের যথাযথ ফ্রিকোয়েন্সি পাই, তবে আবার আমরা সম্ভাব্য আদেশের অর্ধেকই পাই।2n+1(12)(23)(13)

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


1
"আসুন আমরাও উদার হয়ে উঠি এবং ধরুন আপনি নিজের রদবদলের জন্য এলোমেলোভাবে স্বতন্ত্র জোড় সূচকগুলি নির্বাচন করছেন"। কেন এই অনুমান করা যায় এবং কীভাবে উদার হয় তা আমি বুঝতে পারি না। এটি সম্ভাব্য অনুমতি বাতিল করে দেবে বলে মনে হচ্ছে, এর ফলে আরও কম এলোমেলো বিতরণ হবে।
থিলো

1
@ থিলো: আপনাকে ধন্যবাদ আপনার মন্তব্য একটি বর্ধিত উত্তর প্রাপ্য, তাই আমি এটি প্রতিক্রিয়া নিজেই এটি স্থাপন। এখানে আমি উল্লেখ করতে পারি যে "উদার" হওয়া আসলে কোনও আদেশ বাতিল করে না: এটি কেবল অ্যালগরিদমের পদক্ষেপগুলি সরিয়ে দেয় যা অন্যথায় কিছুই করবে না।
whuber

2
এই সমস্যাটি পারমিটেশন গ্রুপের কেলে গ্রাফে মার্কভ চেইন হিসাবে সম্পূর্ণ বিশ্লেষণ করা যেতে পারে। কে = 1 এর মাধ্যমে 7 (একটি 5040 বাই 5040 ম্যাট্রিক্স!) এর জন্য গণনা গণনাগুলি নিশ্চিত করে যে আকারের বৃহত্তম ইগন্যালিউজ (1 এবং -1 পরে) হুবহু । এর থেকে বোঝা যায় যে একবার আপনি অনুমতিটির চিহ্নটি (-1 এর স্থানীয় মানের সাথে মিল রেখে) বিকল্প পরিবর্তন করার পরে, সমস্ত সম্ভাবনার ত্রুটিগুলি হারে ক্ষয় হবে or বা দ্রুত। আমি সন্দেহ করি এটি সমস্ত বৃহত্তর তে ধরে রাখে । (k3)/(k1)=12/(k1)(12/(k1))nk
হোবার

1
আপনি অনেক ভালো চেয়ে কি করতে পারেন সম্ভাব্যতা যেহেতু conjugacy শ্রেণীর উপর পরিবর্তিত হয়, এবং শুধুমাত্র আছে এর পার্টিশন যাতে আপনি আপনার বিশ্লেষণ করতে পারে ম্যাট্রিক্স পরিবর্তে। 5040×504015715×15
ডগলাস জেরে

8

আমি মনে করি আপনার সাধারণ অ্যালগরিদম কার্ডগুলি সঠিকভাবে বদলাবে কারণ সংখ্যার শাফলগুলি অসীমের দিকে ঝুঁকছে।

ধরুন আপনার কাছে তিনটি কার্ড রয়েছে: {এ, বি, সি} ধরে নিন যে আপনার কার্ডগুলি নিম্নলিখিত ক্রমে শুরু হয়: A, B, C। তারপরে একটি বদলে যাওয়ার পরে আপনার নিম্নলিখিত সংমিশ্রণগুলি রয়েছে:

{A,B,C}, {A,B,C}, {A,B,C} #You get this if choose the same RN twice.
{A,C,B}, {A,C,B}
{C,B,A}, {C,B,A}
{B,A,C}, {B,A,C}

সুতরাং, কার্ড এ এর ​​অবস্থানের সম্ভাবনা {1,2,3} position 5/9, 2/9, 2/9}}

যদি আমরা কার্ডগুলি দ্বিতীয়বার বদলে ফেলি, তবে:

Pr(A in position 1 after 2 shuffles) = 5/9*Pr(A in position 1 after 1 shuffle) 
                                     + 2/9*Pr(A in position 2 after 1 shuffle) 
                                     + 2/9*Pr(A in position 3 after 1 shuffle) 

এটি 0.407 দেয়।

একই ধারণাটি ব্যবহার করে আমরা পুনরাবৃত্তি সম্পর্ক তৈরি করতে পারি, অর্থাত:

Pr(A in position 1 after n shuffles) = 5/9*Pr(A in position 1 after (n-1) shuffles) 
                                     + 2/9*Pr(A in position 2 after (n-1) shuffles) 
                                     + 2/9*Pr(A in position 3 after (n-1) shuffles).

আর এ কোডিং (নীচের কোডটি দেখুন), দশটি শ্যাফেলের পরে কার্ড এ এর ​​অবস্থানের সম্ভাবনা দেয়, 1,2,3 {0.33334, 0.33333, 0.33333} হিসাবে। 0.33334 0.3

আর কোড

## m is the probability matrix of card position
## Row is position
## Col is card A, B, C
m = matrix(0, nrow=3, ncol=3)
m[1,1] = 1; m[2,2] = 1; m[3,3] = 1

## Transition matrix
m_trans = matrix(2/9, nrow=3, ncol=3)
m_trans[1,1] = 5/9; m_trans[2,2] = 5/9; m_trans[3,3] = 5/9

for(i in 1:10){
  old_m = m
  m[1,1] = sum(m_trans[,1]*old_m[,1])
  m[2,1] = sum(m_trans[,2]*old_m[,1])
  m[3,1] = sum(m_trans[,3]*old_m[,1])

  m[1,2] = sum(m_trans[,1]*old_m[,2])
  m[2,2] = sum(m_trans[,2]*old_m[,2])
  m[3,2] = sum(m_trans[,3]*old_m[,2])

  m[1,3] = sum(m_trans[,1]*old_m[,3])
  m[2,3] = sum(m_trans[,2]*old_m[,3])
  m[3,3] = sum(m_trans[,3]*old_m[,3])
}  
m

1
+1 টি। এটি প্রমাণ করে যে প্রদত্ত কার্ডের কোনও প্রদত্ত অবস্থানে শেষ হওয়ার সম্ভাবনাটি বদলের সংখ্যা বৃদ্ধির সাথে সাথে প্রত্যাশিত অনুপাতের সমান হয়। যাইহোক, একইভাবে একটি অ্যালগরিদমের ক্ষেত্রেও সত্য হতে পারে যে একবারে এলোমেলো পরিমাণে অ্যারেটি ঘুরিয়ে দেয়: সমস্ত কার্ডের সব পদে শেষ হওয়ার সমান সম্ভাবনা থাকে, তবে এখনও কোনও এলোমেলোতা নেই (অ্যারেটি সাজানো থাকে)।
থিলো

@ থিলো: দুঃখিত আমি আপনার মন্তব্য অনুসরণ করি না। একটি "অ্যালগরিদম এলোমেলো পরিমাণে ঘোরে" তবে এখনও "কোনও র‌্যান্ডম নেই"? আপনি আরও ব্যাখ্যা করতে পারেন?
csgillespie

যদি আপনি একটি এন-এলিমেন্ট অ্যারে 0 এবং এন -1 পজিশনের (এলোমেলোভাবে) মধ্যে ঘোরার মাধ্যমে "পরিবর্তন" করেন তবে প্রতিটি কার্ডের কোনও এন পজিশনে সমাপ্ত হওয়ার ঠিক একই সম্ভাবনা রয়েছে তবে 2 এখনও সর্বদা 1 এর মধ্যে অবস্থিত এবং 3.
থিলো

1
@ থিও: আহ, আমি আপনার বক্তব্য পেয়েছি ভাল আপনি সম্ভাব্যতা (উপরের মতো ঠিক একই ধারণাটি ব্যবহার করে), জন (এ পদে 2 এ) এবং জনসাধারণের (অবস্থানে 3 এ) জন্য কাজ করতে পারেন - বি এবং সি কার্ডের জন্য ডিটো আপনি দেখতে পাবেন যে সমস্ত সম্ভাবনার ঝোঁক রয়েছে 1/3। দ্রষ্টব্য: আমার উত্তরটি কেবল একটি নির্দিষ্ট কেস দেয়, যেখানে @ শুভর উত্তরটি সাধারণ কেস দেয়।
csgillespie

4

আপনি পুরোপুরি অভিন্ন বিতরণ পাবেন না তা দেখার একটি উপায় হ'ল বিভাজ্যতা। অভিন্ন বিতরণে, প্রতিটি আদেশের সম্ভাবনা । আপনি যখন টি এলোমেলো ট্রান্সপজিশনগুলির ক্রম তৈরি করেন এবং তারপরে তাদের পণ্য অনুসারে ক্রম সংগ্রহ করেন, আপনি যে সম্ভাবনাগুলি পান তা কিছু পূর্ণসংখ্যার A এর জন্য A / n 2 টি ফর্মের । যদি 1 / এন ! = / এন 2 টি , তারপরে এন 2 টি / এন ! = 1/n!tA/n2tA1/n!=A/n2tn2t/n!=A। বার্ট্র্যান্ডের পোস্টুলেট (একটি উপপাদ্য) দ্বারা, এমন প্রাইম রয়েছে যা ডিনোমিনেটরে ঘটে এবং যা n কে ভাগ করে না , তাই এন 2 টি / এন ! কোনও পূর্ণসংখ্যা নয়, এবং ট্রান্সপোজিশনগুলিকে সমানভাবে n তে ভাগ করার কোনও উপায় নেই ! একাধিক বিন্যাসন। উদাহরণস্বরূপ, যদি এন = 52 , তারপর হর 1 / 52 ! 3 , 5 , 7 , দ্বারা বিভাজ্য , 47 যখন হর 1 /n3nn2t/n!n!n=521/52!3,5,7,...,47 তাই হয়, নয় একটি / 52 2 টি কমাতে না পারেন, 1 / 52 ! 1/522tA/522t1/52!

কতগুলি আপনার এলোমেলোভাবে অনুচ্ছেদটি ভাল আনুমানিক প্রয়োজন? এলোমেলো ট্রান্সপোজিশনের মাধ্যমে একটি এলোমেলোভাবে ক্রম নির্ধারণের বিষয়টি ডায়াকনিস এবং শাহশাহানী দ্বারা প্রতিসামগ্রী দলের প্রতিনিধিত্বমূলক তত্ত্ব ব্যবহার করে বিশ্লেষণ করেছেন

ডায়াকনিস, পি।, শাহশাহানী, এম। (1981): "এলোমেলো ট্রান্সপোজিশনের সাহায্যে একটি এলোমেলো ক্রম উত্পাদন।" জেড। ওয়ার্স্চ Verw। Geb. 57, 159–179।

একটি উপসংহার ছিল যে এটি লাগে এই অর্থে স্থানান্তর করে যে পরে(1-ϵ)112nlognক্রমবিন্যাস এলোমেলো থেকে অনেক দূরে তবে(1+ϵ)1 পরে(1ϵ)12nlognফলাফল মোটামুটি ভিন্নতা এবংএল2দূরত্বউভয় ক্ষেত্রে এলোমেলোভাবে কাছাকাছি। এই ধরণের কাট অফ ঘটনাটি দলে দলে এলোমেলো পদক্ষেপে প্রচলিত, এবং বিখ্যাত ফলাফলের সাথে সম্পর্কিত যেডেকের এলোমেলোভাবে কাছে আসার আগেআপনার7 টিরিফল শফলদরকার।(1+ϵ)12nlognL27


2

মনে রাখবেন আমি কোনও পরিসংখ্যানবিদ নই, তবে আমি আমার 2 টি লিখব।

আমি আর-তে একটি সামান্য পরীক্ষা করেছি (সাবধান, এটি উচ্চের জন্য খুব ধীর numTrials, কোডটি সম্ভবত অনুকূলিত করা যেতে পারে):

numElements <- 1000
numTrials <- 5000

swapVec <- function()
    {
    vec.swp <- vec

    for (i in 1:numElements)
        {
        i <- sample(1:numElements)
        j <- sample(1:numElements)

        tmp <- vec.swp[i]
        vec.swp[i] <- vec.swp[j]
        vec.swp[j] <- tmp
        }

    return (vec.swp)
    }

# Create a normally distributed array of numElements length
vec <- rnorm(numElements)

# Do several "swapping trials" so we can make some stats on them
swaps <- vec
prog <- txtProgressBar(0, numTrials, style=3)

for (t in 1:numTrials)
    {
    swaps <- rbind(swaps, swapVec())
    setTxtProgressBar(prog, t)
    }

এটি সারিগুলির (একটি পরীক্ষার প্রতি + মূল + মূল) এবং কলামগুলি (প্রতিটি ভেক্টরের উপাদানগুলির জন্য একটি) swapsসহ একটি ম্যাট্রিক্স উত্পন্ন করবে । পদ্ধতিটি যদি সঠিক হয় তবে প্রতিটি কলামের বিতরণ (উদাহরণস্বরূপ প্রতিটি পরীক্ষার জন্য প্রতিটি উপাদানের মানগুলি) মূল ডেটা বিতরণের চেয়ে আলাদা হওয়া উচিত নয়।numTrials+1numElements

কারণ আমাদের আসল ডেটা সাধারণত বিতরণ করা হয়েছিল আমরা আশা করব যে সমস্ত কলামগুলি এ থেকে বিচ্যুত হবে না।

যদি আমরা চালাই

par(mfrow= c(2,2))
# Our original data
hist(swaps[1,], 100, col="black", freq=FALSE, main="Original")
# Three "randomly" chosen columns
hist(swaps[,1], 100, col="black", freq=FALSE, main="Trial # 1") 
hist(swaps[,257], 100, col="black", freq=FALSE, main="Trial # 257")
hist(swaps[,844], 100, col="black", freq=FALSE, main="Trial # 844")

আমরা পেতে:

এলোমেলোভাবে পরীক্ষার ইতিহাস ms

যা খুব আশাব্যঞ্জক দেখাচ্ছে এখন, যদি আমরা পরিসংখ্যানগতভাবে নিশ্চিত করতে চাই যে বিতরণগুলি মূল থেকে বিচ্যুত হয় না তবে আমি মনে করি যে আমরা কোনও কলমোগোরভ-স্মারনভ পরীক্ষা ব্যবহার করতে পারি (দয়া করে কোনও পরিসংখ্যানবিদ এটি সঠিক কিনা তা নিশ্চিত করতে পারেন?) এবং করুন, উদাহরণস্বরূপ

ks.test(swaps[1, ], swaps[, 234])

যা আমাদের পি = 0.9926 দেয়

যদি আমরা সমস্ত কলাম পরীক্ষা করি:

ks.results <- apply(swaps, 2, function(col){ks.test(swaps[1,], col)})
p.values <- unlist(lapply(ks.results, function(x){x$p.value})

এবং আমরা চালাতে

hist(p.values, 100, col="black")

আমরা পেতে:

কোলমোগোরভ-স্মারনভ পরীক্ষার মানগুলির হিস্টোগ্রাম

সুতরাং, অ্যারের উপাদানগুলির সিংহভাগের জন্য, আপনার অদলবদলটি একটি ভাল ফলাফল দিয়েছে, কারণ আপনি চতুর্ভুজগুলিকেও দেখতে পাচ্ছেন।

1> quantile(p.values)
       0%       25%       50%       75%      100% 
0.6819832 0.9963731 0.9999188 0.9999996 1.0000000

মনে রাখবেন, স্পষ্টতই, সংখ্যার পরীক্ষার সংখ্যার সাথে পরিস্থিতি তেমন ভাল নয়:

50 ট্রায়াল

1> quantile(p.values)
          0%          25%          50%          75%         100% 
0.0003399635 0.2920976389 0.5583204486 0.8103852744 0.9999165730

100 ট্রায়াল

          0%         25%         50%         75%        100% 
 0.001434198 0.327553996 0.596603804 0.828037097 0.999999591 

500 ট্রায়াল

         0%         25%         50%         75%        100% 
0.007834701 0.504698404 0.764231550 0.934223503 0.999995887 

0

সিউডো কোডে আমি কীভাবে আপনার অ্যালগরিদমের ব্যাখ্যা করছি:

void shuffle(array, length, num_passes)
  for (pass = 0; pass < num_passes; ++pass) 
    for (n = 0; n < length; ++)
      i = random_in(0, length-1)
      j = random_in(0, lenght-1)
      swap(array[i], array[j]

2×length×num_passes[0,length1]length

length2×length×num_passes

length!length!<length2×length×num_passes

length!|length2×length×num_passes

pপি<এনটিপিএনটিএনটি>2পি|এনটি!এনটি2×এনটি×এনতোমার দর্শন লগ করামি: _পিএকটিগুলিগুলিগুলিএনটি!এনটি2×এনটি×এনতোমার দর্শন লগ করামি: _পিএকটিগুলিগুলিগুলিএনটি>2

এনটিপি<এনটিএনটি-1এনটি-1এনটি

এনটিএনটি-1এনটি!length!|length!। এটি দেখানো কঠিন নয় যে প্রতিটি ট্রেসের ফলাফল পৃথক পৃথকভাবে ঘটায় এবং সেখানে থেকে এটি সহজেই দেখা যায় যে ফিশার-ইয়েটস সমান সম্ভাবনা সহ প্রতিটি অনুমানের উত্পন্ন করে।

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