একটি নম্বর-হপার ম্যাজেস সমাধান করা


18

আমার 8-বছরের পুরানো প্রচলিত ম্যাজগুলি তৈরি করতে বিরক্ত হয়েছে এবং এর মতো দেখতে ভেরিয়েন্টগুলি তৈরি করেছে:

নম্বর হপার নমুনা

ধারণাটি হ'ল এক্স থেকে শুরু করে সাধারণ নিয়মে ও-তে পৌঁছাবেন। উপরন্তু, আপনি পূর্ণসংখ্যা কোন থেকে "প্রস্থান" করতে পারেন অন্য কোন পূর্ণসংখ্যা , কিন্তু আপনি প্রদান করতে হবেবিশেষাধিকার জন্য ডলার। লক্ষ্যটি হ'ল সর্বনিম্ন ব্যয়ের জন্য গোলকধাঁধাটি সমাধান করা। উপরের উদাহরণে, আমরা এক্স -14-8-27-28-o হয়ে 5 থেকে 5 এক্স দামে যেতে পারি, তবে কেবল এক্স -13-11-9-8-29-28-o যেতে সস্তা 4।ab|ab|

সুতরাং এখানে আমার প্রশ্ন: এটি সমাধানের জন্য আপনি কী ভাবতে পারেন সেরা সমাধানটি (অ্যাসিপটোটিক চলমান সময়ের নিরিখে)? আপনি ইনপুট ফর্ম্যাট সম্পর্কে কোনও যুক্তিসঙ্গত অনুমান করতে পারেন।

দ্রষ্টব্য: আমি এখানে "ধাঁধা" ট্যাগটি ব্যবহার করছি কারণ আমার মনে একটি উত্তর রয়েছে তবে আমি নিশ্চিত নই যে এটি সর্বোত্তম এবং অন্য কেউ আমার সমাধানটিকে উন্নত করতে পারে কিনা তা দেখতে চাই। (এখানে গোলকধাঁধার পূর্ণসংখ্যার সংখ্যা)O(n2)n


7
আপনার সৃজনশীল এবং গাণিতিক ধাঁধা তৈরির জন্য আপনার সন্তানের কাছে প্রপস!
বিজেওট

2
@bbejot আপনার আমাকে জিজ্ঞাসা করা কিছু জিনিস দেখতে হবে ... কখনও কখনও আমি তার প্রশ্নের উত্তর দিতে পারি না। উদাহরণস্বরূপ, math.stackexchange.com/questions/33094/…
ফিক্সি

1
আমি নিশ্চিত না যে আপনার খরচের গণনা সঠিক। x-14-18-27-28-o এর এবং x-13-11-9-8-29-28-o এর দাম । 4+9+1=142+2+1+21+1=27
ডেভ ক্লার্ক 14

1
@ ডেভ সমস্ত রূপান্তরের জাম্প নয় are আমরা লাফানোর জন্য 'আব' লিখতে পারি (যার দাম ) এবং 'a-> বি' গ্রাফটিতে a থেকে b পর্যন্ত হাঁটার জন্য (যার মূল্য ) কেবল এটি অনুমোদিত যদি গোলকধাঁধায় কোনও দেয়াল না ভেঙে এগুলি পৌঁছতে পারে। এই স্বরলিপিটিতে আমাদের x-> 14-18-> 27-28-> ও এবং 5 এবং x-> 13-11-> 9-8-> 29-28-> ও এর দাম রয়েছে। আমি ফিক্সি অপ্রয়োজনীয় বলে এই স্বরলিপিটি প্রবর্তন করি নি: দুবার হপ করার কোনও কারণ নেই এবং এইভাবে গোলকধাঁধায় হাঁপস এবং হাঁটার বিকল্প হবে। 0|ab|0
আর্টেম কাজনাটচিভ

2
এটি একটি দুর্দান্ত হোমওয়ার্ক সমস্যা!
জেফি

উত্তর:


15

আপনি এটি ডিস্ক্রাস্ট্রের অ্যালগোরিদমের একটি প্রকরণ ব্যবহার করে সময়ে সমাধান করতে পারেন । আমরা যখন কোনও নতুন নোড ঘুরে দেখি তখন সমস্ত দূরত্ব আপডেট না করে আমরা পালাতে পারি। যদি আমরা একটি নোড y দেখতে যাই তবে আমাদের কেবল y থেকে 0 অবধি চলমান সমস্ত কিছুর দূরত্ব আপডেট করতে হবে , এবং দুটি নোডের y দূরত্ব আপডেট করতে হবে - এবং y + এর নিকটতম মানগুলি y এর চেয়ে কম এবং y এর চেয়ে বেশি হবে না এখনও বাছাই করা হয়েছে।O(nlogn)yyyy+yy

এই আপডেটগুলি ন্যূনতম উপাদানটি ফেরত রাখার জন্য যথেষ্ট কারণ আপনার নিকটবর্তী যে কোনও নিকটতম নোডটি অবশ্যই ইতিমধ্যে পরিদর্শন করা নোডের ঠিক উপরে বা ঠিক নীচে সংখ্যাসূচকভাবে থাকতে হবে।

প্রতিটি নোড একবারে 0 এ আপডেট হয় (যদি আমরা চতুর্ভুজ আচরণ এড়াতে সারি থেকে সমস্ত শূন্য দূরত্বের নোডগুলি পপ আউট করি) এবং প্রতিবার আমরা নোড যুক্ত করি তখন আমরা কেবল ও (1) অন্যান্য আপডেটগুলি করি। মান খোঁজা এবং Y + + রৈখিক সময়ের মধ্যে সম্পন্ন করা যাবে যদি আমরা সব নোড দোকর-লিঙ্ক তালিকা আদেশ রাখা, তাদের পূর্ণসংখ্যা মান অনুসারে সাজানো। এই দোকর-লিঙ্ক তালিকা নির্মাণের সময় লাগে হে ( লগ ইন করুন এন ) সময়, এবং পরিশেষে হে ( ) গাদা নিতে থেকে আপডেট এবং পপ হে ( লগ ইন করুন এন ) সময়, একটি মোট রানটাইম জন্য হে (yy+O(nlogn)O(n)O(nlogn)O(nlogn)


এটি পূর্ণসংখ্যার জন্য বিশেষীযুক্ত বাছাই এবং অগ্রাধিকারের সারিগুলি ব্যবহার করে সম্ভবত কিছুটা উন্নতি করা যেতে পারে, তবে নিম্নোক্ত হ্রাস দ্বারা দেখা যেতে পারে আপনি পূর্ণসংখ্যার বাছাইয়ের চেয়ে ভাল কিছু করতে পারবেন না: আমাদের কাছে যদি পূর্ণসংখ্যার মান , সেট x এর সর্বনিম্ন দ্বিগুণ এবং সর্বাধিক দ্বিগুণ হতে হবে। একে অপরের জন্য 2 x i এবং 2 x i + 1 মান সহ একটি অঞ্চল তৈরি করুন x i । এক্সপ্লোর পরিচালনা সল্টটি প্রতিটি অঞ্চলের মাধ্যমে x i অনুসারে বাছাই করা ক্রমে যায় এবং এর ফলে একটি বাছাই হয়x1,,xnxo2xi2xi+1xixi মান। xi
ডেভ

ডেভ অধিকার, এই কমে যাবে শুধুমাত্র আপডেট করার মাধ্যমে Y + + এবং Y - । এছাড়াও, অঞ্চলের প্রতিটি নোডকে অঞ্চলের প্রতিটি নোডের সাথে সংযুক্ত করার পরিবর্তে, কেবলমাত্র তাদের অঞ্চলের 1 বা 2 টি নোডের সাথে সংযুক্ত করা প্রয়োজন (একটি পথ তৈরি করা)। সুতরাং, প্রতিটি নোডে কেবল 4 টি প্রান্ত থাকে। তারপরে ডিজকস্ট্রার অ্যালগরিদম (ন্যূনতম অগ্রাধিকারের সারি সহ) ( n l g n ) সময় মঞ্জুরি দেওয়ার জন্য প্রয়োগ করা হতে পারে । O(nlgn)y+yO(nlgn)
ববিজট

@bbejot কিন্তু যদি তাই হয়, Thorup দ্বারা অবিচ্ছেদ্য অগ্রাধিকার সারিতে চলমান সময় উন্নতি না হলে , অথবা এমনকি থেকে হে ( ) undirected অবস্থা অধীনে কিছু অতিরিক্ত bucketing কৌশল নিয়ে? O(nloglogn)O(n)
হিশিয়ান-চিহ চাং 之

4

আমি মনে করি আপনি পেতে পারেন সেরা হতে পারে।O(n2)

এটি একটি বিশেষ প্রারম্ভিক নোড (এক্স) এবং শেষ নোড (0) দিয়ে সংক্ষিপ্ততম পথ সমস্যার মধ্যে রূপান্তর করা স্বাভাবিক বলে মনে হয়। প্রতিটি সংখ্যার জন্য অন্য একটি নোডও থাকবে। এক্স এবং 0 উভয়ের উভয় প্রান্তে সমস্ত নম্বর নোডের ওজনের প্রান্ত রয়েছে যা গোলকধাঁধায় পৌঁছানো যায়। সমস্ত নম্বর নোড হয় ওজন 0 এর সাথে সংযুক্ত থাকে (যদি সংখ্যাগুলি গোলকধাঁধায় পৌঁছনীয় হয়) অথবা সংখ্যাগুলির মধ্যে পার্থক্যের সাথে (যদি গোলকধাঁধায় পৌঁছনীয় না হয়)।

এই গ্রাফের সবচেয়ে সংক্ষিপ্ত পথটি চেয়ে কম সমাধান করা যায় না কারণ গ্রাফটি মোটামুটি এন 2 প্রান্ত রয়েছে এবং সবচেয়ে খারাপ ক্ষেত্রে, একবারে প্রতিটি কেস দেখতে হবে। যেমন, সংক্ষিপ্ততম পথের জন্য ডিজকস্ট্র'আ অ্যালগরিদমটি O ( n 2 ) সময় নেয় এবং সবচেয়ে খারাপ ক্ষেত্রে।O(n2)n2O(n2)


আমার মনে এই উত্তরটি ছিল; অবশ্যই, চলমান সময় পেতে আপনাকে ডিজকস্ট্রার অ্যালগরিদমের সাথে সঠিক ডেটা কাঠামোটি ব্যবহার করতে হবে । টিপিক্যাল বাইনারি হ্যাপ ব্যবহার করলে ( n 2 lg n ) পাওয়া যায়O(n2)O(n2lgn)
ফিক্সি

1
আমি আজ সকালে এই সমস্যাটি নিয়ে ভাবছিলাম এবং এটি কিছুটা বাড়িয়ে দেওয়া যেতে পারে। গোলকধাঁধার প্রতিটি সংখ্যার জন্য একটি নোড ব্যবহার করার পরিবর্তে গোলকধাঁধার প্রতিটি অঞ্চলের জন্য একটি নোড ব্যবহার করুন। নোডের মধ্যে ব্যয়টি তখন এক অঞ্চল থেকে অন্য অঞ্চলে লাফানো থেকে সর্বনিম্ন ব্যয়। প্রারম্ভিক নোডটি এক্স সহ অঞ্চল এবং শেষ নোডটি অঞ্চলটি 0 দিয়ে থাকে যদি সেখানে অঞ্চলগুলি থাকে, তবে এটি ( আর 2 ) সময়ে আমরা যে পদ্ধতিগুলি নিয়ে আলোচনা করেছি তার মাধ্যমে সমাধান করা যেতে পারে । rO(r2)
bbejot

গ্রাফটি তৈরি করতে আপনার সময়ও প্রয়োজন , সুতরাং মোট চলমান সময় ( 2 + এন লগ এন ) হওয়া উচিত । এমনকি যদি সেখানে মাত্র দুটি অঞ্চলে, আপনি সংখ্যার দুটি সেট মধ্যে নিকটতম যুগল বের করতে হবে, এবং একটি আছে Ω ( লগ ইন করুন এন ) বীজগাণিতিক গণনার গাছ মডেল যে সমস্যার জন্য আবদ্ধ কম। (বিট কৌশলগুলি সম্ভবত লগ ফ্যাক্টরকে হ্রাস করতে পারে বা নির্মূল করতে পারে))O(nlogn)O(r2+nlogn)Ω(nlogn)
জেফি

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