আমি একটি গ্রহ বিজ্ঞান গবেষক এবং একটি প্রকল্প যার উপরে আমি কাজ করছি এটি শনির রিংগুলির এন- বডি সিমুলেশন। এই বিশেষ অধ্যয়নের লক্ষ্য হ'ল কণাগুলি তাদের নিজস্ব স্ব-মহাকর্ষের অধীনে একসাথে ছড়িয়ে পড়া এবং কোষের সমস্ত কণার গড় বেগ বনাম ক্লাম্পগুলির সামগ্রিক ভর পরিমাপ করা। আমরা নির্ধারণ করার চেষ্টা করছি যে এটি যখন স্যাশনিরিয় গ্রীষ্মের অবিচ্ছিন্নতার সময় ক্যাসিনি মহাকাশযানের দ্বারা তৈরি কিছু পর্যবেক্ষণের ব্যাখ্যা করতে পারে যখন বড় কাঠামো প্রায় প্রান্ত-অন রিংগুলিতে ছায়া ingালতে দেখা গিয়েছিল। নীচে প্রদত্ত যে কোনও টাইমস্টেপ দেখতে কেমন তার একটি স্ক্রিনশট রয়েছে। (প্রতিটি কণা ব্যাস 2 মিটার এবং সিমুলেশন সেল নিজেই 700 মিটার জুড়ে থাকে))
আমি যে কোডটি ব্যবহার করছি তা ইতিমধ্যে প্রতিটি গতিবেগে গড় বেগকে ছড়িয়ে দেয়। আমাকে যা করতে হবে তা হ'ল ঝাঁকুনিতে কণাগুলির ভর নির্ধারণ করার উপায় এবং তাদের মধ্যে বিভ্রান্ত কণা নয় figure আমি প্রতিটি কণার অবস্থান, ভর, আকার ইত্যাদি জানি but তবে আমি সহজেই জানি না যে, বলুন, কণা 30,000-40,000 পাশাপাশি 102,000-105,000 এর সাথে একটি স্ট্র্যান্ড তৈরি করে যা মানুষের চোখের কাছে সুস্পষ্ট।
সুতরাং, আমার যে অ্যালগরিদমটি লিখতে হবে তা এমন একটি কোডের দরকার যা যতটা সম্ভব ব্যবহারকারীর দ্বারা প্রবেশ করা পরামিতি (প্রতিলিপি এবং উদ্দেশ্যমূলকতার জন্য) যা সমস্ত কণা অবস্থানের মধ্য দিয়ে যায়, কী কী কণা ঝাঁকের সাথে সম্পর্কিত তা নির্ধারণ করে এবং তারপরে গণনা করে ভর। এটি দুর্দান্ত হবে যদি এটি "প্রতিটি" ক্লাম্প / স্ট্র্যান্ডের জন্য কোষের সমস্ত কিছুর বিপরীতে করতে পারে তবে আমার মনে হয় না যে এগুলিকে আলাদা করার জন্য আমার আসলে এটির প্রয়োজন ।
কেবলমাত্র আমি ভাবছিলাম এমন কিছু ধরণের N 2 দূরত্ব গণনা করা যেখানে আমি প্রতিটি কণার মধ্যে দূরত্ব গণনা করেছি এবং যদি বলি, নিকটতম 100 কণা একটি নির্দিষ্ট দূরত্বে ছিল, তবে সেই কণাকে একটি অংশ হিসাবে বিবেচনা করা হবে ক্লাস্টারের। তবে এটি বেশ আরামদায়ক বলে মনে হচ্ছে এবং আমি আশা করছিলাম যে আপনি সিএস ভাবেন এবং প্রোগ্রামাররা আরও মার্জিত সমাধানের বিষয়ে জানতে পারেন?
আমার সমাধান সহ সম্পাদিত: আমি যা করেছি তা হ'ল এক ধরণের নিকটতম-প্রতিবেশী / ক্লাস্টার পদ্ধতির গ্রহণ করা এবং দ্রুত-এন-নোংরা এন 2 বাস্তবায়ন প্রথমে করা। সুতরাং, যে কণা অন্যান্য সমস্ত কণা নিরূপণ দূরত্ব, এবং প্রান্তিক মানের একটি ক্লাস্টার অথবা না ছিল কিনা ছিল নেওয়া এন মধ্যে কণা ঘ দূরত্ব (দুটি প্যারামিটার আছে সেট হওয়ার অবরোহমার্গী , দুর্ভাগ্যবশত, কিন্তু কেউ কেউ বলছিল প্রতিক্রিয়া / মন্তব্য, আমি তাদের কিছু না পেয়ে আমি পালাতে যাচ্ছি না)।
আমি তখন দূরত্ব বাছাই না করে কেবল একটি অর্ডার এন অনুসন্ধান করে ডি এর মধ্যে কণাগুলির জন্য একটি কাউন্টার বাড়িয়ে দিয়েছি এবং এটি 6 এর একটি ফ্যাক্টর দ্বারা স্টাফ বাড়িয়ে তুলেছে Then তারপরে আমি একটি "বোকা প্রোগ্রামার গাছ" যুক্ত করেছি (কারণ আমি জানি গাছের কোড সম্পর্কে কিছুই নেই)। আমি সিমুলেশন সেলটি একটি নির্দিষ্ট সংখ্যক গ্রিডে বিভক্ত করি (গ্রিডের আকার ≈7 ডি যখন সর্বোত্তম ফলাফল ) যেখানে গ্রিডের সাথে প্রধান গ্রিড লাইন থাকে, একটি গ্রিড অর্ধেক x এবং y দিয়ে অফসেট হয় , এবং অন্য দুটি দ্বারা অফসেট হয় 1/ x এবং ± y তে 1/4 । কোডটি তখন গ্রিডগুলিতে কণাকে বিভক্ত করে, তারপরে প্রতিটি কণা N কেবল সেই ঘরের অন্যান্য কণায় দূরত্ব গণনা করতে হয়।
তাত্ত্বিকভাবে, যদি এটি সত্যই গাছ ছিল তবে এন 2 গতির বিপরীতে আমার অর্ডার এন * লগ ( এন ) পাওয়া উচিত । আমি দু'জনের মধ্যে কোথাও পৌঁছেছি, যেখানে 50,000-কণার উপ-সেটের জন্য আমি গতিতে 17 গুন বৃদ্ধি পেয়েছি এবং 150,000 কণা কক্ষের জন্য, আমি গতিতে 38x বৃদ্ধি পেয়েছি। প্রথমটির জন্য 12 সেকেন্ড, দ্বিতীয়টির জন্য 53 সেকেন্ড, 500,000-কণা ঘরের জন্য 460 সেকেন্ড। কোডগুলি সিমুলেশনটি 1 টাইমস্টেপ এগিয়ে চালাতে কত সময় নেয় তার সাথে তুলনীয় গতি, তাই এই মুহুর্তে এটি যুক্তিযুক্ত। ওহ - এবং এটি পুরোপুরি থ্রেড করা হয়েছে, সুতরাং এটি যতটা প্রসেসর আমি নিক্ষেপ করতে পারব তাই লাগবে।