যোগফল দুটি সংখ্যা নির্বাচন করুন


9

এখানে নিকটতম প্রতিবেশী সমস্যা।

বাস্তব দেওয়া a1,,an (খুব লম্বা n!), আরও লক্ষ্য বাস্তব p, অনুসন্ধান ai এবং aj যার SUM সবচেয়ে কাছের p। আমরা যুক্তিসঙ্গত প্রাক প্রক্রিয়াজাতকরণ / সূচকের অনুমতি দেয়a1,,an (পর্যন্ত O(nlogn)), তবে প্রশ্নের সময়ে (প্রদত্ত p), ফলাফলটি খুব দ্রুত ফেরত দেওয়া উচিত (যেমন, O(logn) সময়)।

(সহজ উদাহরণ: যদি আমরা কেবল এককটি চাইতাম ai এটি সবচেয়ে কাছের p, আমরা বাছাই করা হবে a1,,an অফলাইন O(nlogn), তারপরে ক্যোয়ারির সময় বাইনারি অনুসন্ধান করুন, O(logn))।

সমাধানগুলি যে কাজ করে না:

1) বাছাই করুন a1,,anঅফলাইন, তারপরে ক্যোয়ারির সময়, উভয় প্রান্ত থেকে শুরু করুন এবং দুটি পয়েন্টার অভ্যন্তরে সরান ( http://bit.ly/1eKHHDy )। ভাল না, কারণO(n) প্রশ্নের সময়।

2) বাছাই করুন a1,,an অফলাইন, তারপরে ক্যোয়ারির সময়, প্রতিটি নিন ai এবং "বন্ধু" এর জন্য বাইনারি অনুসন্ধান সম্পাদন করুন যা এটির কাছাকাছি কিছু যোগ করতে সহায়তা করে p। ভাল না, কারণO(nlogn) প্রশ্নের সময়।

3) সমস্ত জোড়া বাছাই করুন (a1,,an)অফলাইন, তারপরে বাইনারি অনুসন্ধান করুন। ভাল না, কারণO(n2) প্রাক প্রক্রিয়াকরণ।

ধন্যবাদ!

পুনশ্চ. অনুশীলনের জন্য আরও সাধারণীকরণ প্রয়োজন: (1)a1,,an এবং p 50-মাত্রিক ভেক্টর হতে, (2) ভেক্টর কোসাইন দূরত্ব হতে "ক্লোজ" এবং (3) kসর্বাধিক নিকটতম জোড়া - যে-যোগটি, 1-সেরা নয়।


প্রাক-প্রক্রিয়াজাতকরণের সময়টির কোনও সীমা আছে বা প্রাক-প্রক্রিয়াজাতকরণের পরে আমরা যে পরিমাণ জায়গা ব্যবহার করতে পারি? যদি আমরা সীমাবদ্ধ থাকিO(n) স্থান, আপনার কি বিশ্বাস করার কোনও কারণ আছে যে এটি সমাধান করা যেতে পারে, বলুন, O(lgn)সময়? এটা আমার কাছে ভয়ঙ্করভাবে অসম্ভব বলে মনে হচ্ছে।
DW

প্রাক প্রক্রিয়াজাতকরণ ও (সীমাবদ্ধ)n লগ n)। আমি সমস্যার বিবৃতি আপডেট করেছি।
কেভিন

জিজ্ঞাসা করা দ্রুত হতে পারে বলে আমার বিশ্বাস করার কোনও কারণ নেই, তবে নিকটতম-প্রতিবেশী (কেডি-ট্রি, লোকাল-স্পর্শকাতর হ্যাশিং ইত্যাদি) এর জন্য অনেক দরকারী ফলাফল আমার কাছে স্বতঃস্ফূর্তভাবে ভাল বলে মনে হয়। স্থানীয় সংবেদনশীল হ্যাশিং ব্যবহার করে একটি আনুমানিক সমাধান ব্যবহারিক ব্যবহারের জন্য ভাল।
কেভিন

উত্তর:


17

এটি প্রায় অবশ্যই অসম্ভব।

মনে করুন আপনি প্রিপ্রসেসিং সময় দিয়ে আপনার সমস্যার সমাধান করতে পারেন P(n) এবং প্রশ্নের সময় Q(n)। তারপরে 3SUM সমস্যা সমাধানের জন্য একটি সহজ অ্যালগরিদম রয়েছে a একটি সেট দিনn আসল সংখ্যা, কোনও তিনটি উপাদান শূন্যের সমষ্টি? P(n)+nQ(n)সময়। আমরা সমস্ত সংখ্যার প্রাক প্রক্রিয়া করি, তারপরে প্রতিটি সংখ্যার জন্যak, আমরা এর মান খুঁজে পাই ai+aj এটি সবচেয়ে কাছের ak; যদি এটি মেলেak ঠিক আছে, আমরা 3SUM সমস্যার সমাধান পেয়েছি।

তবে 3SUM এর জন্য পরিচিত দ্রুততম অ্যালগরিদমটি এতে চলে runs O(n2)সময়, এবং এই অ্যালগরিদমটি সর্বোত্তমভাবে অনুমান করা হয়। তাছাড়াও একটা মিল আছেΩ(n2)গণনার একটি সীমাবদ্ধ তবে প্রাকৃতিক সিদ্ধান্ত গাছের মডেলটিতে কম আবদ্ধ। পূর্ণসংখ্যার সেটগুলির জন্য , সামান্য সাবক্যাড্র্যাটিক-টাইম অ্যালগরিদমগুলি রয়েছে যেগুলি "বিটগুলির সাথে গেম খেলছে", তবে পূর্ণসংখ্যার র‌্যাম মডেলটিতেও 3SUM কে অনুমান করা হয়েছেΩ(n2/polylogn) সময়।

সুতরাং অনুমান যে সঠিক, আপনার সমস্যার জন্য হয় (কাছাকাছি) চতুষ্কোণ প্রিপ্রোসেসিং সময় বা (কাছাকাছি) লিনিয়ার ক্যোয়ারী সময় প্রয়োজন।


2

আপনি প্রাক-প্রক্রিয়াজাতকরণের সময় যদি সীমাহীন স্থান এবং সীমাহীন সময় ব্যবহার করতে পারেন তবে নীচের সমাধানটি আপনার প্রয়োজনীয়তা পূরণ করে:

  • প্রাক-প্রসেসিংয়ের সময়, সেটটি গণনা করুন {ai+aj:1ijn}, এবং এই সেটটি বাছাই করা ক্রমে সংরক্ষণ করুন। এই সেটটি উত্পন্ন এবং বাছাই করা যেতে পারেO(n2) সময়, এবং এটি লাগে O(n2) এটি সংরক্ষণ করার জন্য জায়গা।

  • এখন একটি প্রশ্নের উত্তর দিতে (সন্ধান করতে) ai,aj কোথায় ai+aj কাছাকাছি হয় pসম্ভব হিসাবে), কেবল এই সাজানো তালিকায় একটি বাইনারি অনুসন্ধান করুন। যে নিতে হবেO(lgn) সময়।

যদি এই সমাধানটি গ্রহণযোগ্য না হয় তবে আপনার প্রয়োজনীয়তাগুলি আরও যত্ন সহকারে চিন্তা করতে হবে এবং সেই অনুসারে প্রশ্নটি সম্পাদনা করতে হবে।


হাই, এবং আপনাকে ধন্যবাদ! তবে আপনার সমাধানটি আমার সলিউশন # 3 এর সমান, যা ও (এন ^ 2) প্রাক প্রক্রিয়াজাতকরণের কারণে সমস্যাযুক্ত। আমার ক্ষেত্রে, এন খুব বড় (যেমন, 1 মি) এবং আমার অবশ্যই ও (এন ^ 2) ক্রিয়াকলাপ এড়ানো উচিত।
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.