একটি লাইন বিভাগে ভ্রমণ উপর সাক্ষাত্কার ধাঁধা


10

দৈর্ঘ্যের একটি সংখ্যা রেখায় M, কোথায় 0 < M <= 1,000,000,000, আপনি N( 1 < N <= 100,000) পূর্ণসংখ্যার পয়েন্টের জোড় দিয়েছেন । প্রতিটি জোড়ায়, প্রথম পয়েন্টটি উপস্থাপন করে যেখানে কোনও বস্তু বর্তমানে অবস্থিত এবং দ্বিতীয় পয়েন্টটি উপস্থাপন করে যেখানে কোনও বস্তুকে সরিয়ে নেওয়া উচিত। (মনে রাখবেন secondপয়েন্টটি এর চেয়ে ছোট হতে পারে first)।

এখন ধরে নিন, আপনি বিন্দুতে শুরু করেছেন 0এবং এমন একটি কার্ট রয়েছে যা 1অবজেক্ট ধরে রাখতে পারে । সংখ্যার লাইন ( স্থানচ্যুতি নয় ) সর্বনিম্ন দূরত্ব ভ্রমণ করার সময় আপনি সমস্ত বস্তুকে তাদের প্রাথমিক অবস্থান থেকে স্ব স্ব চূড়ান্ত অবস্থানে নিয়ে যেতে চান । আপনি পয়েন্ট শেষ করতে হবে M

এখন, আমি এই সমস্যাটিকে একটি সরল সমস্যার মধ্যে হ্রাস করার চেষ্টা করছি। সত্যি কথা বলতে আমি এমনকি একটি নিষ্ঠুর শক্তি ( সম্ভবত লোভী) সমাধানের কথা ভাবতেও পারি না । যাইহোক, আমার প্রথম চিন্তাটি ছিল একটি পিছনের আন্দোলনকে দুটি অগ্রগামী আন্দোলনের দিকে অবনমিত করা, তবে এটি সব ক্ষেত্রে কার্যকর হবে বলে মনে হয় না।

আমি এই 3নমুনা পরীক্ষার কেসগুলি এখানে এঁকেছি :http://i.stack.imgur.com/zRv4Q.png

প্রথম টেস্টকেসের উত্তর হ'ল 12। প্রথমে আপনি redআইটেমটি পয়েন্টে তুলবেন 0। তারপরে আপনি বিন্দুতে 6(দূরত্ব = 6) চলে যান , redআইটেমটি অস্থায়ীভাবে ফেলে দিন , তারপরে greenআইটেমটি বাছাই করুন। তারপরে আপনি বিন্দুতে 5(দূরত্ব = 1) যান এবং greenআইটেমটি ফেলে দিন । তারপরে আপনি বিন্দুতে 6(দূরত্ব = 1) ফিরে যান এবং redআপনি যে আইটেমটি ফেলেছিলেন তা বাছাই করুন , পয়েন্ট 9 (দূরত্ব = 3) এ সরান, তারপরে ক্রমটি শেষ করতে পয়েন্ট 10(দূরত্ব = 1) এ যান।

ভ্রমণ করা মোট দূরত্ব ছিল 6 + 1 + 1 + 3 + 1 = 12ন্যূনতম সম্ভাব্য দূরত্ব।

অন্য দুটি মামলার উত্তর রয়েছে 12, আমি বিশ্বাস করি। তবে আমি এটিকে সমাধান করার জন্য কোনও সাধারণ নিয়ম খুঁজে পাচ্ছি না।

কেউ ধারণা পেয়েছে?


যদি আমি ভুল না হয়ে থাকি তবে "ওভারল্যাপ" গণনা করার জন্য আপনার কি কোনও ডাস্টাস্ট্রাকচারের প্রয়োজন হবে না? অন্যথায় আমি এটি ভুল উপায়ে সমাধান করছি।
ডেভিড

আপনি এখনও পতাকা তুলতে পারেন এবং যদি মোড রাজি হন তবে তিনি আবার খুলবেন এবং মাইগ্রেশন করবেন
ratchet freak

আমরা সাইটগুলির মধ্যে প্রশ্নগুলি স্বয়ংক্রিয়ভাবে স্থানান্তর করতে পারি (সেগুলি বন্ধ থাকলেও), দয়া করে পোস্টটি অতিক্রম করবেন না। পরিবর্তে, @ rachetfreak এর পরামর্শ অনুসরণ করুন, সংযমের মনোযোগের জন্য পতাকা এবং প্রশ্নটি স্থানান্তরিত করার জন্য জিজ্ঞাসা করুন।
ইয়ানিস

1
এটি সত্যিই নিভিয়ে শোনাচ্ছে, তবে আপনি যদি কোনও পণ্যসম্ভারের টুকরোগুলি না করে ডান দিকে অগ্রসর করে শুরু করেন তবে কি হয়। আপনি যখন সেই কার্গোটি আঘাত করেন, আপনি যা বহন করছেন তা ফেলে দিন, সেই পণ্যসম্ভারটি তুলে নিন এবং এটিকে সঠিক জায়গায় স্থাপনের জন্য এগিয়ে যান। আপনি যদি অন্য কোনও পণ্যসম্ভারকে আঘাত করেন যা সরানো দরকার, স্রোতটি ফেলে দিন, এটি বাছাই করুন এবং এটি মোকাবেলা করুন। আপনার যখন কার্গো নেই তখন ডানদিকে যান।
সুপারসাম 654

1
সমস্ত পয়েন্টে কি কেবলমাত্র প্রদত্ত বস্তুগুলি বিদ্যমান? কোনও নির্দিষ্ট স্থানে একাধিক অবজেক্ট থাকা কি সম্ভব? অস্থায়ীভাবে কোনও স্থিতিকে এটির চূড়ান্ত স্থান ব্যতীত অন্য কোনও স্থানে সেট করার অনুমতি রয়েছে কি?
শান ম্যাকসোমিংথ

উত্তর:


4
  1. যদি আপনি খালি হন তবে ডানদিকে যেতে শুরু করুন।

  2. যখনই আপনি কোনও বস্তুর কাছে পৌঁছেছেন এবং আপনি খালি হয়ে যাবেন, এটিকে (দুহ) তুলে নিন এবং এর গন্তব্যের দিকে এগিয়ে যান।

  3. যখনই আপনি কোনও বস্তুর কাছে পৌঁছেছেন aএবং আপনি ইতিমধ্যে বহন করছেন b, সর্বদা যে কোনও বস্তুর সংখ্যাসূচকতম গন্তব্য (বাঁদিকের সবচেয়ে দূরে) আছে তা বেছে নিন।

  4. আপনি যদি এখনও এম তে নেই, তবে পদক্ষেপ 1 এ ফিরে যান।

এটি সর্বোত্তম: আপনার আসল পছন্দটিই কেবলমাত্র এক ধাপ 3. ধাপে in

প্রোগ্রামার্স.এসএক্সে কেন এই প্রশ্ন? হ্যাঁ, "সাক্ষাত্কারের প্রশ্ন", তবে এটি কেবল একটি দুর্দান্ত ধাঁধা।

পুনশ্চ. বাস্তবায়নের ক্ষেত্রে, আপনার প্রয়োজনীয় সমস্ত কাজগুলি তালিকার (পয়েন্টের পূর্ণসংখ্যার জোড়) তালিকার মূল অবস্থান অনুসারে বাছাই করা দরকার।


1

মনে করুন আপনাকে এই পদক্ষেপগুলি দেওয়া হয়েছে (a, b), (c, d), (e, f), ...তবে আপনার ভ্রমণ করতে হবে ন্যূনতম দূরত্ব abs(b - a) + abs(d - c) + abs(f - e) + ...এবং আপনি যে প্রকৃত দূরত্বটি ভ্রমণ করেছেন তা abs(b - a) + abs(c - b) + abs(d - c) + abs(e - d) + ...
মূলত, বিন্যাসের একটি অ্যারের প্রদত্ত বিন্দুটি হ'ল চারপাশের উপাদানগুলিকে অদলবদল করে "ভ্রমণ দূরত্ব" ফাংশনটি হ্রাস করা। আপনি যদি কোনও নির্দিষ্ট সংমিশ্রণটিকে নোড হিসাবে বিবেচনা করেন এবং আপনি এটি থেকে প্রান্তে পৌঁছাতে পারেন এমন সমস্ত সংমিশ্রণগুলি আপনি আশেপাশের অনেকগুলি গ্রাফ অনুসন্ধান অ্যালগরিদমগুলির মধ্যে একটি ব্যবহার করতে পারেন যা একটি হিউরিস্টিক ব্যবহার করে। একটি উদাহরণ মরীচি অনুসন্ধান


0

আমি কি সমস্যাটি বুঝতে পারি তবে নীচের বিষয়গুলি কী:

  1. জোড়গুলির প্রথম সংখ্যার সাথে জোড়গুলি সজ্জিত করুন যা বর্তমান অবস্থান
  2. লাইনটি অদলবদলকারী উপাদানগুলিকে তাদের যথাযথ স্থানে নিয়ে যান (আপনার একটি অস্থায়ী পরিবর্তনশীল রয়েছে)

এটিকে সাজানো হয়েছে তা গ্যারান্টি দেয় যে আপনি উপাদানগুলি যথাযথ স্থানে রাখার জন্য পিছনে পিছনে যাবেন না (লাইনটি অ্যারে বা তালিকা হিসাবে প্রদর্শিত হয় তা নির্বিশেষে)

@Templatetypedef মন্তব্য পরে আপডেট করুন: সমস্ত জুড়ি সংরক্ষণ করতে
একটি ব্যবহার করুন HashTable। প্রতিটি জোড়ার বর্তমান অবস্থান সূচি কী হিসাবে ব্যবহার করুন।
জোড়গুলির উপরে একটি দ্বিতীয় সূচক ব্যবহার করুন।

 1. Get next pair according to index from the line.
 2. If current pair exists in hashtable then place element to its target location.  
    2.a Remove pair from hashtable.  
    2.b Make current pair the target location. Then go to step 1  
 ELSE 
        Increment current index until you get a pair present in the hashtable. Go to step 2  

আপনি একবারে কেবল একটি ইউনিট স্থানান্তর করতে পারেন, অনেক বার আপনাকে নিজের পথটি ফিরে যেতে হবে বলে আমি মনে করি
ডেভিড

আমি আপনাকে সত্যিই অনুসরণ করি না t মনে হচ্ছে প্রয়োজনীয়তাটি কেবল এগিয়ে যাওয়া এবং সংখ্যাগুলি অদলবদল করার জন্য You আপনি ইতিমধ্যে বর্তমান অবস্থান এবং লক্ষ্য অবস্থানটি জানেন ust কেবল তাদের অদলবদল করুন (কার্টের ভেরিয়েবলটি যেমন আপনি বলেছেন তেমন ব্যবহার করে) এবং এতে যান পরের জুটি
user10326

এই পাল্টা নমুনা বিবেচনা করুন: (1, 10), (10, 1), (2, 3), (3, 4)। এটি করার সর্বোত্তম উপায় হ'ল বস্তুটি 1 পজিশন 10 তে বহন করা, তারপর বস্তুটিকে অবস্থান 10 এ নিয়ে পজিশন 1 এ নিয়ে যাওয়া, তারপরে 2 থেকে 3 এবং 3 তে 4 নিয়ে যাওয়া 4. শুরুর পজিশনের ক্রমটি 1 কে 10 তে বহন করবে এবং তারপরে শুরু করে সমস্ত পথটি 2 থেকে 3, 3 থেকে 4 এ নিয়ে যাবে, তারপরে 10 বাছাইয়ের জন্য সমস্ত পথে চলে যাবে এবং আনবে এটা ফিরেছে.
টেম্পলেটটিফাইফ

@templatetypedef: আমি কী বোঝাতে চাইছি তা দেখেছি Uউক্তিত উত্তর
ব্যবহারকারী 10326

আপনার আপডেট হওয়া উত্তরে, "বর্তমান সূচী" কি কেবল বর্তমান অবস্থান নির্দেশ করে?
ডেভিড

0

মূলত লোভী এমন একটি অ্যালগরিদমের প্রতি আমার প্রবণতা:

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

while !Done
    if CartIsEmpty()
        FindClosestObjectToMove()
        MoveToObject()
       LoadCart()
    else
        Destination = Cart.Contains.Target
        CurrentMove = [Location, Destination]
        SubList = List.Where(Move.Within(CurrentMove))
        if !SubList.Empty
            Destination = SubList.FindSmallest(Location, Move.Origin)
        MoveTo(Destination)
        if !Destination.Empty
            SwapCart()
            UpdateTaskList()
        else
            EmptyCart()
            DeleteTask()

আমি মনে করি এটি সমস্ত ক্ষেত্রে কভার করে। এক অর্থে এটি পুনরাবৃত্তিযোগ্য তবে নিজের তালিকার পরিবর্তে তালিকাটি আপডেট করার মাধ্যমে।


উত্তরের জন্য ধন্যবাদ. আপনি কি ব্যাখ্যা করতে পারেন Destination = SubList.FindSmallest(Location, Move.Origin)? কি Move.Originপ্রতিনিধিত্ব করে?
ডেভিড

মুভ.আরগিন হ'ল অবস্থান যেখানে বর্তমানে স্থানান্তরিত হবে - এটির উত্স origin মূলত, প্রথমে কোনও মুভ দেখার সময় এর স্প্যানের মধ্যে থাকা ছোট ছোট কোনও চালগুলি করুন।
লরেন পেচটেল

-1

এটি অসমোট্রিক ট্র্যাভেল সেলসম্যান সমস্যা । আপনি এটিকে গ্রাফ হিসাবে ভাবতে পারেন। প্রান্তগুলি প্রতিটি (শুরু, সমাপ্ত) জোড়া, প্রত্যেকটির জন্য একটি (0, শুরু) এবং অন্যান্য সমস্ত জোড়া (সমাপ্ত, শুরু) হবে।

এনপি! = পি ধরে নিলে এটির একটি বহনযোগ্য প্রত্যাশিত চলমান সময় থাকবে।


3
আমি নিশ্চিত না যে এটি সত্য। এটি অসম্পূর্ণ টিএসপি-র একটি বিশেষ ক্ষেত্রে , সুতরাং এটির বহু-কালীন সমাধান থাকতে পারে।
টেম্পলেটটিফাইফ

আপনার কি (সমাপ্তি, এম) এর মতো প্রান্তের দরকার Mনেই, নম্বর লাইনের শেষ পয়েন্টটি কোথায় ?
ডেভিড

এছাড়াও, একটি ক্ষতিকারক অ্যালগরিদম খুব ধীর, কারণ Nএটি 10,000,000 হতে পারে।
ডেভিড

এই বিবৃতিটি ব্যাক আপ করার জন্য, সম্ভবত প্রতিটি অসমমিতিক ভ্রমণ বিক্রয়কর্মী সমস্যাটিকে এই বর্ণনার সমতুল্য সমস্যায় রূপান্তর করার কোনও পদ্ধতি আছে?
ড্যান_ওয়াটারওয়ার্থ

1
এটা সমতুল্য নয়। ভ্রমণকারী বিক্রয়কর্তাকে অবশ্যই গ্রাফের সমস্ত শীর্ষে যেতে হবে। আপনার গঠনের জন্য তাকে সমস্ত প্রান্তটি পরিদর্শন করা প্রয়োজন।
অ্যালেক্সিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.