নিম্নলিখিত অনুশীলনগুলি আমি পর্যবেক্ষণ করা শিক্ষার্থীদের হাতে তুলে দেওয়া হয়েছে:
বিমানে পয়েন্ট দেওয়া , একটি অ্যালগরিদম তৈরি করুন যা পয়েন্টগুলির একটি জোড়া খুঁজে পায় যা সমস্ত জোড় পয়েন্টের মধ্যে দূরত্ব সর্বনিম্ন। অ্যালগরিদমটি সময় চলতে হবে o ( n 2 ) ।
একটি (অপেক্ষাকৃত) সহজ বিভাজন এবং বিজয়ী অ্যালগরিদম রয়েছে যা কার্যকে সময়মতো সমাধান করে ।
প্রশ্ন 1 : এমন কোনও অ্যালগরিদম রয়েছে যা প্রদত্ত সমস্যাটিকে হ'ল সবচেয়ে খারাপ সময়ে ?
আমাকে কী সন্দেহ করেছিল যে এটি সম্ভব হতে পারে এমন একটি ফলাফল যা আমি মনে করি কিছু আলোচনায় দেখেছি (রেফারেন্স প্রশংসিত)। এটা যে একটি চেয়ে বেশী না ধ্রুব সংখ্যা লাইন বরাবর কিছু বিবৃত পয়েন্ট কিছু বিন্দুর চারিদিকে সমতলে ব্যবস্থা করা যেতে পারে পি ব্যাসার্ধ একটি বৃত্তের ভিতরে দ ∈ আর সঙ্গে, দ জড়িত পয়েন্ট কোন দুই মধ্যে ন্যূনতম দূরত্ব । আমার মনে হয় সি = 7 , পয়েন্টগুলি কেন্দ্রের পি (সমেত ক্ষেত্রে) এর সাথে একটি সমতুল ষড়ভুজ গঠন করে ।
সেক্ষেত্রে, নিম্নলিখিত অ্যালগরিদমের তাদের পদক্ষেপে সমস্যাটি সমাধান করা উচিত ।
fun mindist [] | p::[] = INFINITY
| mindist p1::p1::[] = dist(P[0], P[1])
| mindist p::r = let m = mindist(r) in
min(m, nextNeighbour(p, r, m))
end
নোট কারণ পয়েন্ট মাত্র একটি ধ্রুবক সংখ্যা রৈখিক সময় (বলে দাবী করেন) যে r
farer কোন দূরে চেয়ে হতে পারে m
থেকে p
(বিবৃতিতে উপরে অভিমানী); নতুন ন্যূনতম সন্ধানের জন্য কেবল এই পয়েন্টগুলি তদন্ত করতে হবে। অবশ্যই একটি ধরা আছে; আপনি কীভাবে বাস্তবায়ন করবেন nextNeighbour
(সম্ভবত লিনিয়ার সময়ে প্রিপ্রোসেসিং দিয়ে)?
এবং
।
ধরুন সীমাবদ্ধ। (মোড়কিত) সময় থেকে ন্যূনতম দূরত্ব সহ সম্ভব ? (আপনি অনুমান হতে পারে তদন্ত পয়েন্ট যোগ করে নির্মাণ করা একের পর এক।)