সিজেম, 28 27 বাইট
PP+mr_mc\ms]1.mrmqf*"(,)".\
এই সমাধানটি প্রত্যাখ্যান-ভিত্তিক নয়। আমি পোলার স্থানাঙ্কগুলিতে পয়েন্টগুলি উত্পন্ন করছি তবে পয়েন্টগুলির অভিন্ন ঘনত্ব অর্জনের জন্য রেডির অ-ইউনিফর্ম বিতরণ সহ।
এটি এখানে পরীক্ষা করুন।
ব্যাখ্যা
PP+ e# Push 2π.
mr_ e# Get a random float between 0 and 2π, make a copy.
mc\ e# Take the cosine of one copy and swap with the other.
ms] e# Take the sine of the other copy and wrap them in an array.
e# This gives us a uniform point on the unit circle.
1.mr e# Get a random float between 0 and 1.
mq e# Take the square root. This is the random radius.
f* e# Multiply x and y by this radius.
"(,)".\ e# Put the resulting numbers in the required format.
কেন এটি কাজ করে? ব্যাসার্ধ r
এবং (ছোট) প্রস্থের একটি সংকীর্ণ অ্যানিউলাস বিবেচনা করুন dr
। ক্ষেত্রফলটি আনুমানিক 2π*r*dr
(যদি এ্যানুলাস সংকীর্ণ হয় তবে অভ্যন্তরীণ এবং বাহ্যিক পরিধিটি প্রায় অভিন্ন, এবং বক্রতা উপেক্ষা করা যেতে পারে, যেমন অঞ্চলটি পরিধির পাশের দৈর্ঘ্য এবং প্রস্থের প্রস্থের সাথে একটি আয়তক্ষেত্র হিসাবে বিবেচনা করা যেতে পারে annulus)। সুতরাং অঞ্চলটি ব্যাসার্ধের সাথে রৈখিকভাবে বৃদ্ধি পায়। এর অর্থ হ'ল আমরাও এলোমেলো রেডিওর রৈখিক বন্টন চাই, ধ্রুবক ঘনত্ব অর্জনের জন্য (ব্যাসার্ধের দ্বিগুণে, দ্বিগুণ পরিমাণ ক্ষেত্র পূরণ করতে পারে, তাই আমরা সেখানে দ্বিগুণ পয়েন্ট চাই)।
আমরা কীভাবে 0 থেকে 1 এর মধ্যে রৈখিক এলোমেলো বিতরণ তৈরি করব? প্রথমে বিযুক্ত মামলাটি দেখুন। বলুন, আমাদের 4 টি মানের পছন্দসই বিতরণ রয়েছে {0.1, 0.4, 0.2, 0.3}
(যেমন আমরা 1
4 গুণ সাধারণ হতে চাই 0
এবং দ্বিগুণ সাধারণ 2
; আমরা 3
তিনগুণ সাধারণ হিসাবে চাই 0
):
পছন্দসই বিতরণ সহ চারটি মানের মধ্যে কীভাবে একটি চয়ন করতে পারে? আমরা তাদের স্ট্যাক আপ করতে পারি, y- অক্ষের সাথে 0 এবং 1 এর মধ্যে অভিন্ন র্যান্ডম মান বাছাই করতে পারি এবং সেই বিন্দুতে বিভাগটি বাছাই করতে পারি:
যদিও এই বাছাইয়ের দৃশ্যটি দেখার আলাদা উপায় রয়েছে। পরিবর্তে আমরা বিতরণের প্রতিটি মানটিকে সেই বিন্দু পর্যন্ত মান সঞ্চারের সাথে প্রতিস্থাপন করতে পারি:
এবং এখন আমরা এই চার্টের শীর্ষ লাইনটিকে একটি ফাংশন হিসাবে বিবেচনা করি এবং একটি ফাংশন f(x) = y
পেতে এটি উল্টে করি , যা আমরা এতে অভিন্ন র্যান্ডম মানটিতে প্রয়োগ করতে পারি :g(y) = f-1(y) = x
y ∈ [0,1]
দুর্দান্ত, সুতরাং রেডিয়ির রৈখিক বিতরণ উত্পন্ন করতে কীভাবে এটি ব্যবহার করতে পারেন? এটি আমরা চাই বিতরণ:
প্রথম পদক্ষেপটি হ'ল বিতরণের মান সংগ্রহ করা। তবে বিতরণটি অবিচ্ছিন্ন, সুতরাং পূর্ববর্তী সমস্ত মানগুলির সংমিশ্রণের পরিবর্তে আমরা এর থেকে এক অবিচ্ছেদ্য অংশ গ্রহণ 0
করি r
। আমরা খুব সহজেই যে বিশ্লেষণী সমাধান করতে পারে: । যাইহোক, আমরা এটিকে স্বাভাবিক করতে চাই, অর্থাত এটি একটি ধ্রুবক দ্বারা এটির গুণিত করা যাতে এটি সর্বাধিক মান দেয় , তাই আমরা যা চাই তা হ'ল :∫0r r dr = 1/2 r2
1
r
r2
এবং পরিশেষে, আমরা একটি ফাংশন পেতে এটি বিপরীত করি [0,1]
যাতে আমরা অভিন্ন মূল্যতে প্রয়োগ করতে পারি, যা আমরা আবার বিশ্লেষণাত্মকভাবে করতে পারি: এটি ঠিক r = √y
, যেখানে y
এলোমেলো মান:
এটি একটি মোটামুটি কার্যকর কৌশল যা প্রায়শই সাধারণ বিতরণগুলি হুবহু উত্পন্ন করতে ব্যবহার করা যেতে পারে (এটি কোনও বিতরণের জন্য কাজ করে তবে জটিলগুলির জন্য শেষ দুটি পদক্ষেপটি সংখ্যাসূচকভাবে সমাধান করতে হতে পারে)। তবে, আমি উত্পাদন কোডে এই বিশেষ ক্ষেত্রে এটি ব্যবহার করব না, কারণ বর্গমূল, সাইন এবং কোসাইন প্রতিরোধমূলক ব্যয়বহুল: প্রত্যাখ্যান-ভিত্তিক অ্যালগরিদম ব্যবহার করা গড়ে গড়ে আরও দ্রুত হয়, কারণ এটি কেবল সংযোজন এবং গুণন প্রয়োজন।