কম্পিউটার টিউটোরিয়াল

C++-এ একটি রেখায় সর্বোচ্চ পয়েন্ট (Max Points on a Line)

ম্যাক্স পয়েন্টস অন অ্যা লাইন সমস্যা

একটি ২D প্লেনে কিছু পয়েন্ট দেওয়া আছে। একই সরল রেখায় থাকা সর্বোচ্চ কতগুলো পয়েন্ট আছে তা বের করতে হবে।

উদাহরণ: পয়েন্টগুলো [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] → সর্বোচ্চ ৪টি পয়েন্ট একই রেখায়।

সমাধানের পদ্ধতি (O(n²) ব্রুট ফোর্স বালিশ স্লোপ তুলনা)

  • n < 3 হলে n ফেরত দিন
  • প্রতিটি পয়েন্ট জোড়া (i-1, i) এর জন্য স্লোপ গণনা করুন
  • যদি দুটি পয়েন্ট একই হয়, সেই পয়েন্টের ফ্রিকোয়েন্সি কাউন্ট করুন
  • অন্যথায়, সব পয়েন্টের সাথে স্লোপ মিলিয়ে কাউন্ট করুন: (y3-y2)*(x2-x1) == (y2-y1)*(x3-x2) (ক্রস মাল্টিপ্লিকেশন দিয়ে ফ্লোট এড়ানো)
  • সর্বোচ্চ কাউন্ট আপডেট করুন

দ্রষ্টব্য: এটি O(n³) সমাধান। অপ্টিমাইজড O(n² log n) সমাধান হ্যাশম্যাপ স্লোপ কাউন্টিং দিয়ে সম্ভব।

C++ কোড উদাহরণ

[{1,1},{3,2},{5,3},{4,1},{2,3},{1,5}]

আউটপুট

4
  1. C++-এ দুটি রেশনাল নম্বরের মধ্যে বড়টি বের করুন

  2. C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা

  3. C++-এ একটি রেখা বৃত্তকে স্পর্শ করে কিনা বা ইন্টারসেক্ট করে কিনা চেক করা

  4. C++-এ static_cast