গুগল কোড জ্যাম গ্রেট ওয়াল সমস্যার জন্য আরও দ্রুত সমাধান রয়েছে কি?


16

নিম্নলিখিত গুগল কোড জ্যাম 1C প্রশ্নটি বিবেচনা করুন :

চীনের গ্রেট ওয়ালটি অসীম রেখা হিসাবে শুরু হবে, যেখানে সমস্ত অবস্থানের উচ্চতা 0

কয়েকটি উপজাতি , এন 1000 , নিম্নলিখিত প্যারামিটার অনুসারে প্রাচীরের দেয়ালে আক্রমণ করবে - একটি শুরুর দিন, ডি , একটি শুরুর শক্তি এস , একটি সূচনা পশ্চিম-স্থানাঙ্ক, ডাব্লু , এবং একটি সূচনা পূর্ব-সমন্বিত, । এই প্রথম আক্রমণটি শক্তিশালী এস, রেঞ্জ [ ডাব্লু , ] এর দিন ডি তে ঘটে । [ ডাব্লু , ] এর মধ্যে যদি প্রাচীরের কোনও অংশ থাকে তবে এর উচ্চতা < এসNN1000DSWED[W,E]S[W,E]<S, আক্রমণটি সফল, এবং দিনের শেষে, প্রাচীরটি এমনভাবে তৈরি করা হবে যে উচ্চতার < S এর মধ্যে এর যে কোনও অংশটি S এর উচ্চতায় হবে S (বা আরও বেশি, যদি অন্য কোনও আক্রমণ হয়) day দিনটি একই অংশে আঘাত হ'ল শক্তি এস > এস এর সাথে[W,E]<SSS>S )

প্রতিটি উপজাতি পশ্চাদপসরণের পূর্বে আক্রমণ চালাবে এবং প্রতিটি আক্রমণ এর আগে একটি থেকে পুনরাবৃত্তভাবে নির্ধারিত হবে। প্রতিটি উপজাতির কিছু δ ডি , δ এক্স , এবং δ এস থাকে যা তাদের আক্রমণগুলির ক্রম নির্ধারণ করে: আক্রমণগুলির মধ্যে δ ডি1 দিন অপেক্ষা করবে , তারা প্রতিটি আক্রমণে তাদের আক্রমণের সীমা δ এক্স ইউনিট স্থানান্তর করবে (নেতিবাচক = পশ্চিম, ইতিবাচক = পূর্ব), যদিও পরিসীমাটির আকার একই থাকবে, এবং প্রতিটি আক্রমণের পরেও তাদের শক্তি স্থির মান দ্বারা বৃদ্ধি / হ্রাস পাবে।1000δDδXδSδD1δX

সমস্যাটির লক্ষ্য হ'ল আক্রমণকারী উপজাতিদের একটি সম্পূর্ণ বিবরণ দেওয়া, তাদের আক্রমণগুলি কতটি সফল হবে তা নির্ধারণ করুন।

আমি প্রায় 20 সেকেন্ডের মধ্যে দিয়ে চলতে পারে এমন একটি সমাধানের কোড পরিচালনা করতে পেরেছি: আমি বিশ্বাস করি যে আমার প্রয়োগ করা সমাধানটি সময় নেয়, যেখানে A = সিমুলেশনের মোট সংখ্যা (সর্বোচ্চ 1000000 ), এবং এক্স = আক্রমণ রেঞ্জের অনন্যতম পয়েন্টগুলির মোট সংখ্যা (সর্বোচ্চ 2000000)O(AlogA+(A+X)logX)A=1000000X=2000000 )।

উচ্চ স্তরে, আমার সমাধান:

  • সমস্ত ট্রাইব তথ্য পড়ে
  • আক্রমণ রেঞ্জের জন্য সমস্ত অনন্য স্থানাঙ্ক গণনা করে - ( )XO(A)
  • ন্যূনতম উচ্চতার মানগুলি অনুসরণ করে এমন ব্যাপ্তির উপরে ওয়ালটি অলস-আপডেট হওয়া বাইনারি গাছ হিসাবে প্রতিনিধিত্ব করে । একটি পাতা হ'ল দুটি এক্স স্থানাঙ্কের স্প্যান যা এর মধ্যে কিছুই থাকে না এবং সমস্ত প্যারেন্ট নোড তাদের বাচ্চাদের দ্বারা .াকা অবিচ্ছিন্ন বিরতি প্রতিনিধিত্ব করে। - ( এক্স লগ এক্স )XXO(XlogX)
  • প্রতিটি ট্রাইব সম্পাদন করবে এমন সমস্ত আক্রমণ তৈরি করে এবং দিনের বেলা বাছাই করে - O(AlogA)
  • প্রতিটি আক্রমণের জন্য, দেখুন এটি সফল হবে কিনা ( ক্যোয়ারির সময়)। যখন দিনটি পরিবর্তন হয়, সমস্ত অ-প্রক্রিয়াজাত সফল আক্রমণগুলির মধ্য দিয়ে লুপ করুন এবং সেই অনুযায়ী প্রাচীরটি আপডেট করুন ( প্রতিটি আক্রমণে লগ এক্স আপডেটের সময়)। - ( একটি লগ এক্স )logXlogXO(AlogX)

আমার প্রশ্নটি হ'ল চেয়ে আরও ভাল করার কোনও উপায় আছে ? সম্ভবত, উপজাতির ক্রমাগত আক্রমণগুলির রৈখিক প্রকৃতির সদ্ব্যবহার করার কোনও কৌশলগত উপায় আছে কি? 20 সেকেন্ডে একটি উদ্দিষ্ট সমাধানের জন্য খুব দীর্ঘ মনে হয় (যদিও এর জন্য জাভা দায়ী হতে পারে)।O(AlogA+(A+X)logX)


3
দয়া করে এটি বন্ধ করবেন না এটি একটি বৈধ প্রশ্ন। একটি উত্তর হ'ল একটি নিম্ন বাউন্ড প্রমাণ হবে, এটি দেখানো যে আমরা আরও ভাল করতে পারি না, যদি এটি সত্যই আমরা করতে পারি তবে সবচেয়ে ভাল। উদাহরণস্বরূপ, আমি অনুমান করছি যে আমরা সম্ভবত এলিমেন্ট ডিস্টিন্টনেস সমস্যাটি ব্যবহার করতে সক্ষম হতে পারি তবে এটি সম্পর্কে ভাবার সময় পাইনি।
আর্যভট্ট

আমি এটি তখন খোলা
রাখব

উত্তর:


2

উন্নতির সুস্পষ্ট কক্ষটি এই পদক্ষেপ:

প্রতিটি ট্রাইব সম্পাদন করবে এমন সমস্ত আক্রমণ তৈরি করে এবং দিনের বেলা বাছাই করে - হে(একজনলগএকজন)

আমরা জানি যে উপজাতিরা একটি নির্দিষ্ট দিন থেকে নিয়মিত বিরতিতে আক্রমণ করবে। তার মানে আমাদের মূলত প্রচুর প্রাক-সাজানো তালিকাগুলি মার্জ করা উচিত। এছাড়াও সমস্যা বিবৃতি আমাদের বলে যে এখানে কখনই এক হাজারের বেশি উপজাতি থাকবে না (অর্থাত্‍ একীকরণের জন্য 1000 টি তালিকা); ১০,০০,০০০ সর্বাধিক আক্রমণগুলির তুলনায় একটি অল্প সংখ্যক! আপনার প্রয়োগের আপেক্ষিক সময়গুলির উপর নির্ভর করে, এটিকে স্যুইচিংয়ের ফলে প্রক্রিয়াজাতকরণের অর্ধেক অংশ কেটে যেতে পারে।

তাত্ত্বিক জটিলতার অনুকূলকরণের জন্য আমি এটিই বলতে পারি, তবে এই পরিবর্তনের পরে এটি সর্বোত্তম হতে পারে তার আমার কোনও প্রমাণ নেই।


আমি ধাঁধাটি নিজেই গিয়েছিলাম, তবে আমি প্রাচীরটির অনেকগুলি উপস্থাপন ব্যবহার করেছি: একটি বাইনারি অনুসন্ধান গাছ (সি ++ এর std::mapসুনির্দিষ্ট হতে হবে) যেখানে দেয়ালের উচ্চতা পরিবর্তিত হয় সেগুলি সংরক্ষণ করে। এটির সাহায্যে আমি প্রয়োজনীয় নোডগুলি যোগ করতে এবং অপসারণ করতে সক্ষম হয়েছি (অর্থাত্ যদি কোনও জটিল বিভাগ যদি বৃহত, অত্যধিক আক্রমণ, বা একই শক্তির একাধিক আক্রমণ স্পর্শ করে তবে নোডের সংখ্যা উল্লেখযোগ্যভাবে হ্রাস পাবে)। এটি বৃহত ইনপুটটি 3.9 সেকেন্ডে (আমার মিড-স্পিক বিকাশ ল্যাপটপে) সমাধান করেছে। আমি সন্দেহ করি উন্নতির বিভিন্ন কারণ রয়েছে:

  • আপনি উল্লেখ করেছেন যে, বক্সিং এবং আনবক্সিং ব্যয়বহুল হতে পারে, তবে সি ++ এর টেমপ্লেট-ভিত্তিক পাত্রে এটি পুরোপুরি এড়ানো যায়।
  • যদিও আমি ব্যবহৃত প্রাচীরের উপস্থাপনা তাত্ত্বিকভাবে আরও খারাপ, তবুও বেশিরভাগ ক্ষেত্রে নোডের সংখ্যা গতিশীলভাবে হ্রাস করতে সক্ষম হওয়ায় এটি দ্রুত-দ্রুত করে তোলে (বেশিরভাগ পরীক্ষার কেস 1 কে নোডের নিচে সর্বাধিক হয়ে যায়, এবং সমস্ত 2 কে 10 কে এর নিচে ছিল) । প্রকৃতপক্ষে, কেবলমাত্র উল্লেখযোগ্য সময় নিয়ে যাওয়া একমাত্র কেসটি ছিল #,, যা মনে হয় অনেকগুলি আন্তঃ ছেদ করার জন্য রয়েছে ges
  • আমি কোনও প্রাক-প্রক্রিয়াকরণ ব্যবহার করিনি (প্রতিটি উপজাতি কখন আক্রমণ করবে এবং তারপরে প্রতিটি যুগের সর্বনিম্ন-সর্বাধিক সন্ধান করতে হবে) তা পর্যবেক্ষণ করে পর্যায়গুলি নির্ধারিত হয়)। আবার এটি তাত্ত্বিকভাবে আরও খারাপ, তবে বেশিরভাগ ক্ষেত্রে আমি সন্দেহ করি যে নীচের ওভারহেডের অর্থ এটি দ্রুত ছিল (আমি এটি পরীক্ষা করব এবং আপনার কাছে ফিরে আসব)। আপডেট : আমি আক্রমণগুলির জন্য অগ্রাধিকারের সারি যুক্ত করেছি, উপরে বর্ণিত পদ্ধতির অনুরূপ (যদিও বড় অ্যারে তৈরি করার পরিবর্তে আমি এটি অন-ফ্লাই গণনা করেছি) এবং বড় ইনপুটটির জন্য সময়টি হ্রাস পেয়ে 3.0 সেকেন্ডে পড়েছে।

সংক্ষেপে, আমি যখন মনে করি সাধারণ ক্ষেত্রে আপনার অ্যালগরিদমটি সর্বোত্তম-নিকটতম, তবে বেশ কয়েকটি উপায় রয়েছে আপনি সাধারণ ইনপুটগুলির জন্য এটির গতি বাড়িয়ে দিতে পারেন ।


1

নিম্নলিখিতটি প্রশ্ন থেকে সরানো হয়েছে, কারণ এটি একটি উত্তর।

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

সমাধানটি এখানে পাওয়া যাবে । আমি এখানে যা পোস্ট করেছি তা অনেকটাই একই; সুতরাং আমি আরও বেশি বিশ্বাস করতে আগ্রহী যে আরও কার্যকর সমাধানের অস্তিত্ব নেই।

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