আপনাকে একটি ফাইল দেওয়া হয়েছে যা 32-বিট আর্কিটেকচারে সমস্ত সম্ভাব্য সংখ্যা রয়েছে। 4 নম্বরটি এই ফাইলটি থেকে নিখোঁজ রয়েছে। 4 টি অনুপস্থিত নম্বরগুলি সন্ধান করুন


22

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


উত্তর:


19

এটি কোনও সাক্ষাত্কার বা প্রকৃত কাজের জন্যই হোক না কেন, আপনার প্রথম অগ্রাধিকারটি একটি কার্যনির্বাহী সমাধান হওয়া দরকার যা আপনাকে বোঝায় । এর অর্থ সাধারণত আপনার প্রথম সমাধানটি দেওয়া উচিত যা আপনি ভাবতে পারেন যে এটি সহজ এবং আপনার পক্ষে ব্যাখ্যা করা সহজ ।

আমার জন্য, এর অর্থ সংখ্যাগুলি বাছাই করুন এবং ফাঁকগুলির জন্য স্ক্যান করুন। তবে, আমি ব্যবসায়িক সিস্টেম এবং ওয়েব অ্যাপ্লিকেশনগুলিতে কাজ করি। আমি বিট দিয়ে গলগল করি না, এবং আমার দলটিও চাই না!

আপনি যদি একটি নিম্ন-স্তরের জন্য, ধাতব কাজের কাছাকাছি সাক্ষাত্কার নিচ্ছেন তবে "বাছাই করা" সম্ভবত ফাঁকা দৃষ্টিতে দেখা হবে। তারা চায় আপনি বিট ইত্যাদির বিষয়ে চিন্তাভাবনা করুন। আপনার প্রথম উত্তরটি হওয়া উচিত, "ওহ, আমি একটি বিটম্যাপ ব্যবহার করব।" (বা বিট অ্যারে, বা বিট সেট))

এবং তারপরে, যে কোনও উপায়ে - এমনকি যদি আপনি "ভুল" সমাধান দেন, আপনার সাক্ষাত্কারকারক (বা বস!) যদি এর জন্য চাপ দেয় তবে আপনি ম্যানেজারের উদ্বেগের নির্দিষ্ট ক্ষেত্রটিকে কেন্দ্র করে কিছু উন্নতি বা বিকল্প প্রস্তাব করতে পারেন।

  • মারাত্মকভাবে সীমাবদ্ধ র‌্যাম? 512MB এর চেয়ে কম?
    এটিকে ডিস্কে জায়গায় বাছাই করুন। আপনি অনুকূলিতকরণ এবং / অথবা বাফার বাছাই করা ব্লকগুলি সর্বাধিক-স্বেচ্ছাসেবী পরিমাণে ব্যবহার করতে পারেন।
  • সীমাবদ্ধ সময়?
    সেই র‌্যাম ব্যবহার করুন! বাছাই ইতিমধ্যে O(n*log(n))। (বা একটি পূর্ণসংখ্যার বালতি সাজানোর জন্য ও (এন)!)
  • Maintainability?
    বাছাইয়ের চেয়ে সহজ আর কী হতে পারে ?!
  • বিট পতাকা / ক্ষেত্রের জ্ঞান প্রদর্শন করে না? ( BitSet/ BitMap/ BitArray)
    ঠিক আছে ... এগিয়ে যান এবং BitArray"পাওয়া সংখ্যাগুলি" ফ্ল্যাগ করতে একটি ব্যবহার করুন । এবং তারপরে স্ক্যান করুন 0
  • অনুমানযোগ্য "রিয়েল-টাইম" জটিলতা?
    বিটম্যাপ সমাধানটি ব্যবহার করুন। এটি ফাইলের একক পাস এবংBitArray/BitSet(এর সন্ধান করতে0) এরউপর দিয়ে অন্য একটি পাস। এটাইO(n), আমার মনে হয়!

বা যাই হোক না কেন.

আপনার উদ্বেগের সমাধান করুন। প্রয়োজনে প্রথমে নিষ্পাপ সমাধান ব্যবহার করে প্রথমে সমস্যাটি সমাধান করুন। এখনও বিদ্যমান না এমন উদ্বেগের দিকে মনোযোগ দেওয়ার জন্য প্রত্যেকের সময় নষ্ট করবেন না।


আমি একটি নির্বোধ পদ্ধতির সাথে 4 বিলিয়ন সংখ্যা বাছাইয়ের সম্ভাব্যতা সম্পর্কে এতটা নিশ্চিত নই, ডিস্কে ছেড়ে দেওয়া যাক। যদিও কখনও চেষ্টা করে দেখেনি।
ইকো

1
@ আইকো ওয়েল ... এবং আবারও মূল কথাটি হ'ল ... অতিরিক্ত জিনিসগুলিকে জটিল করবেন না। প্রথম পদক্ষেপটি হ'ল সমস্যাটি সমাধান করা, যে কোনও উপায়ে এটি নির্দোষ হলেও, এটি সমাধানের জন্য আপনি ভাবতে পারেন। আমি এমনকি যদি তুমি সময় কাটানোর iterating নিশ্চিত যখন ব্যবসা শুধু দরকার আপনার সাথে "অধিকার" সমাধান আছে করতে আপনার ভবিষ্যৎ নিয়োগকর্তা থাকবে হতাশা মাত্রা চাপ সৃষ্টি করতে পারেন একটি সমাধান। প্রমাণ করুন যে আপনি উভয়ই করতে পারেন! প্রমাণ করুন যে আপনি সমস্যাগুলি দ্রুত সমাধান করতে পারেন, এবং তারপরে রিফ্যাক্টরিং এবং / অথবা প্রয়োজনীয় হিসাবে অনুকূলকরণের জন্য সম্ভাব্য সমস্যাগুলি সনাক্ত করুন ।
এসভিডজেন

1
@ ইভান "কারণ আপনার কাছে প্রশ্নটি সাক্ষাত্কারে উঠে এসেছিল" এর মত নয়, "প্রতিটি পরিচালক যে সন্ধান করছেন তার একটি নির্দিষ্ট উত্তর রয়েছে" " ... যতক্ষণ না আপনি সমস্যা সমাধানের সক্ষমতা দেখিয়েছেন এবং সমস্যাগুলি সমাধান করার জন্য ধরা পড়েন না যতক্ষণ না আমি আপনাকে দিয়েছি তা আমি অবশ্যই সমাধান করব না!
এসভিডজেন 21

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

1
@ ইভান: আপনি এখনও ধরে নিচ্ছেন যে আপনার প্রশ্নের দৃষ্টান্তটির ওপিগুলির মতো একই বাধা রয়েছে। ওপি বলেনি যে তার অ্যালগরিদমটি 32 বিট মেশিনে চালাতে হবে, তিনি এমনকি এটিও বলেননি যে এটি কোনও কম্পিউটারে চালাতে হবে, একটি ধারণাগত অ্যালগরিদম উপযুক্ত হতে পারে। তিনি "সমস্ত সম্ভাব্য সংখ্যার" অর্থ কী তাও জানায় না, এমনকি 8-বিট মাইক্রোকন্ট্রোলারগুলিতেও ইচ্ছামত আকারের পূর্ণসংখ্যার গণিত সম্ভব। আপনি নিখুঁত বিবৃতি দিচ্ছেন এমন প্রচুর অনুমান।
হোসনেম

19

যেহেতু এটি একটি ফাইল, আমি ধরে নিচ্ছি আপনাকে একাধিক পাস করার অনুমতি দেওয়া হচ্ছে। প্রথমে 256 টি কাউন্টারের একটি অ্যারে তৈরি করুন, ফাইলটির উপরে পুনরাবৃত্তি করুন এবং প্রতিটি সংখ্যা বর্ধনের জন্য কাউন্টারটিকে সংখ্যার প্রথম বাইট হিসাবে সূচিযুক্ত করুন। আপনি যখন কাজটি সম্পন্ন করবেন তখন বেশিরভাগ কাউন্টারগুলিতে 2 ^ 24 হওয়া উচিত, তবে 1 টি পর্যন্ত 4 টি কাউন্টারের মান কম হওয়া উচিত। এই সূচকগুলির প্রত্যেকটি অনুপস্থিত সংখ্যার একটির প্রথম বাইট উপস্থাপন করে (যদি এটির চেয়ে কম 4 থাকে তবে একাধিক অনুপস্থিত সংখ্যা একই প্রথম বাইট ভাগ করে নেয়)।

এই সূচকগুলির জন্য, 256 টি কাউন্টারের আরেকটি অ্যারে তৈরি করুন এবং ফাইলটিতে দ্বিতীয় পাস করুন। এবার, যদি প্রথম বাইটটি পূর্বের মানগুলির মধ্যে একটি হয় তবে দ্বিতীয় বাইটের উপর ভিত্তি করে এর অ্যারে একটি কাউন্টার বাড়ান। আপনার কাজ শেষ হয়ে গেলে, 2 2 16 এর চেয়ে কম কাউন্টারগুলির জন্য আবার সন্ধান করুন এবং আপনার অনুপস্থিত সংখ্যার দ্বিতীয় বাইট থাকবে, প্রত্যেকটি এটির সাথে প্রথম বাইটের সাথে মেলে।

এটি তৃতীয় বাইটের জন্য আবার করুন (লক্ষ্য করুন যে প্রতিটি পাসে আপনার সর্বোচ্চ 4 টি অ্যারে প্রয়োজন, যদিও প্রতিটি বাইট 4 টি আলাদা বাইট পর্যন্ত অনুসরণ করা যেতে পারে) এবং চতুর্থ বাইটের জন্য, এবং আপনি সমস্ত হারিয়ে যাওয়া সংখ্যা খুঁজে পেয়েছেন।

সময়ের জটিলতা - O(n * log n)
স্পেস জটিলতা - ধ্রুবক !

সম্পাদনা:

আসলে, আমি n=2^32প্যারামিটার হিসাবে বিবেচনা করেছি , তবে অনুপস্থিত সংখ্যার সংখ্যাটিও k=4একটি পরামিতি। এটি ধরে k<<nনেওয়ার অর্থ স্থানটির জটিলতা O(k)

হালনাগাদ:

কেবল মজাদার জন্য (এবং কারণ আমি বর্তমানে জং শিখতে চাইছি) আমি এটি মরিচায় প্রয়োগ করেছি: https://gist.github.com/idanarye/90a925ebb2ea57de18f03f570f70ea1f । আমি পাঠ্য উপস্থাপনের জন্য নির্বাচিত হয়েছি, যেহেতু অন-ওয়ান এটি ~ 2 ^ 32 সংখ্যা দিয়ে চালাচ্ছে ...


সমস্ত সংখ্যা মেমোরিতে রাখা (একাধিক পাসের জন্য) 4 বাইট * 2 ^ 32 মেমরির প্রয়োজন, যা জিনিসগুলিকে চাপ দিচ্ছে। সুতরাং আরও সম্ভবত আপনি চারবার সমস্ত I / O করবেন। তবে ব্যবহৃত অন্য স্মৃতি অত্যন্ত ছোট, সেখানে দুর্দান্ত কাজ।
user949300

1
@ ব্যবহারকারী949300 আমি ধরে নিচ্ছি যে এই সমাধানটি পুরো জিনিসটি একবারে স্মৃতিতে লোড করার চেয়ে টুকরো টুকরো করে ফাইল টুকরোটি পড়েছে
রিচার্ড টিংল

"বেশিরভাগ কাউন্টারগুলিতে 2 ^ 24 হওয়া উচিত, তবে 1 টি পর্যন্ত 4 টি কাউন্টারে নিম্ন মানের হওয়া উচিত" - ভুল: 0 হতে পারে, সমস্ত অনুপস্থিত মান প্রথম বাইট ভাগ করে (দ্বিতীয় এবং তৃতীয়ও সম্ভব)। পরবর্তী: দ্বিতীয় পাসে আপনি কতটি অ্যারে তৈরি করেন? 256, 1 থেকে 4 বার 256, 256 বার 256? এবং তারপর তৃতীয় এবং পরবর্তী পাস?
বার্নহার্ড হিলার

3
@ বার্নহার্ডহিলার ফাইলটিতে 32-বিট স্পেসে সমস্ত সম্ভাব্য সংখ্যা রয়েছে, 4 টি পৃথক সংখ্যার জন্য সংরক্ষণ করুন। এই হিসাবে, প্রথম বাইটগুলির সমস্ত ঘটবে, তাদের মধ্যে কেবল 1 থেকে 4 এর মধ্যে হিট কম হবে।
লাসে ভি কার্লসেন

@ লাসেভি.কার্লসেন ধন্যবাদ, এখন আমি অ্যালগরিদম বুঝতে পেরেছি।
বার্নহার্ড হিলার

6

যদি এটি জাভা হয়, আপনি একটি বিটসেট ব্যবহার করতে পারেন। ঠিক আছে, তাদের মধ্যে দুটি, কারণ তারা সমস্ত 32 বিট সংখ্যা বেশ ধরে রাখতে পারে না। কঙ্কাল কোড, সম্ভবত বগি:

BitSet bitsetForPositives = new Bitset(2^31);  // obviously not 2^31 but you get the idea
BitSet bitsetForNegatives = new Bitset(2^31);

for (int value: valuesTheyPassInSomehow) {
  if ((value & 0x80000000) == 0)
     bitsetForPositives.set(value );
  else
     bitsetForNegatives.set(value & ~0x80000000);
}

তারপরে BitSet.nextClearBit()কে নিখোঁজ রয়েছে তা আবিষ্কার করুন use

নোটটি পরে যুক্ত হয়েছে:

নোট করুন যে এই অ্যালগরিদমের সাথে সামঞ্জস্যভাবে সময় সাশ্রয়ী অংশটি চালানো মোটামুটি সহজ । বলুন মূল ফাইলটি প্রায় সমান অংশে বিভক্ত হয়েছে। 4 জোড়া বিটসেটগুলি বরাদ্দ করুন (2 জিবি, এখনও পরিচালনাযোগ্য)

  1. সমান্তরালভাবে চারটি থ্রেড রাখুন, প্রতিটি প্রসেসের একটি ফাইল তাদের নিজস্ব জোড়া বিটসেটের মধ্যে থাকে।
  2. সম্পূর্ণ হয়ে গেলে, একক থ্রেডে ফিরে যান বা বিটসেটস (তুচ্ছ সময়), তারপরে নেক্সেলক্লিয়ারবাইটকে চারবার কল করুন (মোটামুটি তুচ্ছ সময়ও)।

আমি প্রত্যাশা করছিলাম যে আমি / ও এখনও রেট সীমাবদ্ধ পদক্ষেপ হিসাবে থাকি তবে যাদুকরীভাবে যদি সমস্ত সংখ্যা স্মৃতিতে থাকে তবে আপনি সত্যিই জিনিসগুলিকে গতি বাড়িয়ে দিতে পারবেন।


3
@ ইদান আইরে এই সমাধানটির জন্য সামান্য কোড প্রয়োজন, কোডিং ত্রুটিগুলির কম সম্ভাবনা। আমি সুন্দর এই সময় ও (এন)। এছাড়াও এটি বিশাল ফাইলের মাধ্যমে একাধিক পাস অনুমান করার / প্রয়োজন হয় না, তাই এটি একাধিক পাসের প্রয়োজন বোধ করে এমন একটি অ্যালগরিদমের চেয়ে কম স্থান ব্যবহার করে। "ওহ প্রিয়" বলতে আপনি কী বোঝাতে চাইছেন দয়া করে তা ব্যাখ্যা করুন।
user949300

2
Integer.MIN_VALUEসঠিকভাবে পরিচালনা করে না। আপনি সাইন বিটটি ঠিক করতে অস্বীকার করার পরিবর্তে মাস্ক আউট করতে পারেন।
কোডসইনচাউস

1
এই নিষ্পাপ পদ্ধতির জন্য বিটসেটগুলির জন্য 2 ^ 32 বিট = 4 গিব = 512 মাইবি প্রয়োজন, যা একটি 32-বিট সিস্টেমে এমনকি সামান্য পরিমাণের র্যাম is
কোডসইনচওস

যদি পছন্দের ভাষার কোনও বিটসেটে অন্তর্নির্মিত না থাকে, বাইট অ্যারে ব্যবহার করে সেগুলি অনুকরণ করে। উদাহরণস্বরূপ সি # তে:bool GetBit(byte[] byteArray, uint index) { var byteIndex = index >> 3; var bitInByte = index & 7; return (byteArray[byteIndex] >> bitInByte) & 1 != 0; }
কোডসইনচাউস

1
@ জোলিনরুজ (এবং জ্যাকসিবি) সুতরাং, আমরা সম্মত হই যে এটি সময়মতো লিনিয়ার, বিনয়ী (1/2 গিগ) র্যাম ব্যবহার করে এবং কেবল I / O এর একটি পাস নেয়। আমার জন্য কাজ কর.
user949300

5

এই প্রশ্নটি বিটের অ্যারে (সত্য / মিথ্যা) ব্যবহার করে সমাধান করা যেতে পারে। নির্দিষ্ট নম্বরটি পাওয়া গেছে কিনা তা ধরে রাখতে অ্যারের সূচকটি ব্যবহার করে সমস্ত সংখ্যার জন্য উত্তর ধরে রাখতে এটি সবচেয়ে দক্ষ কাঠামো হওয়া উচিত।

সি শার্প

var bArray = new BitArray(Int32.MaxValue);

//Assume the file has 1 number per line
using (StreamReader sr = File.OpenText(fileName))
{
        string s = String.Empty;
        while ((s = sr.ReadLine()) != null)
        {
            var n = int32.Parse(s);
            bArray[n] = true;
        }
}

তারপরে কেবল অ্যারের মাধ্যমে পুনরাবৃত্তি করুন এবং সেই মানগুলির জন্য যারা এখনও মিথ্যা তারা ফাইলটিতে নেই।

আপনি ফাইলটি ছোট অংশগুলিতে বিভক্ত করতে পারেন তবে আমি আমার 16.0 গিগাবাইট ল্যাপটপে উইন্ডোজ 7 (64 বিট) চলমান একটি পূর্ণ ইন্ট 32 সর্বোচ্চ আকারের অ্যারে (2147483647) বরাদ্দ করতে সক্ষম হয়েছি।

এমনকি যদি আমি bit৪ বিট না চালাতাম তবে আমি আরও বিট অ্যারে বরাদ্দ করতে পারি। আমি প্রাক-প্রক্রিয়া করব যাতে প্রতিটি [0-64000] [64001-128000], ইত্যাদি এর পরিসীমা বিশিষ্ট ছোট ফাইলগুলির একটি সেট তৈরি করা থাকে যা উপলব্ধ পরিবেশগত সম্পদের জন্য উপযুক্ত হবে। বড় ফাইলের মধ্যে দিয়ে যান এবং প্রতিটি সেটটি এটি সম্পর্কিত ফাইলের সাথে সংযুক্ত করে লিখুন। তারপরে প্রতিটি ছোট ফাইল প্রক্রিয়া করুন। প্রাক-প্রক্রিয়াজাতকরণের পদক্ষেপের কারণে এটি কিছুটা বেশি সময় নিতে পারে তবে সীমাবদ্ধ সংস্থান থাকলে এটি সংস্থান সীমাবদ্ধতার কাছাকাছি চলে আসবে।


এটি নেতিবাচক সংখ্যাগুলি হ্যান্ডেল করে না। (অথবা ইনপুটটি চাপলে সর্বাধিক বিট সেট সহ স্বাক্ষরবিহীন ইনটগুলি)) বিটসেটের জন্য মেমরিটি বেশিরভাগ 32 বিট সিস্টেমেও সমস্যা হওয়া উচিত নয়।
user949300

@ user949300 - সঠিক। অ্যারে সমস্ত ভ্যালু মান দিয়ে আরম্ভ করা যখন আমি কোন বড় মেমরি গ্রাহ্য খেয়াল করেনি। Theণাত্মক সংখ্যার জন্য একজনের গৌণ বিটআরে দরকার হবে। হতে পারে bArrayNegative = নতুন বিটআরারি (Int32.MaxValue)। নম্বরটি পড়ার পরে এটি ইতিবাচক বা নেতিবাচক জন্য পরীক্ষা করা যেতে পারে এবং তারপরে উপযুক্ত বিট অ্যারেতে রাখা যেতে পারে। মন্তব্যের জন্য ধন্যবাদ।
জন রেইনর

2

এটি একটি সাক্ষাত্কারের প্রশ্ন হিসাবে, আমি সাক্ষাত্কারকারকে সীমাবদ্ধতাগুলি সম্পর্কে কিছুটা বোঝাবো। তারপরে, "সমস্ত সম্ভাব্য সংখ্যা" এর অর্থ কী? সবাই অনুমান হিসাবে এটি কি আসলেই 0 ... 2 <(32-1)? সাধারণ 32-বিট-আর্কিটেকচারগুলি কেবল 32 টি বিট সংখ্যার সাথে আরও অনেকগুলি নিয়ে কাজ করতে পারে। এটি কেবল উপস্থাপনের বিষয়, স্পষ্টতই।

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

তবে আপনি যদি সত্যিই কিছু প্রশ্ন বাদে "0 ... 2 ^ (32-1) থেকে সমস্ত সংখ্যার একটি ফাইল দিয়েছেন, তবে আমাকে একটি অনুপস্থিত দিন" (এবং এটি যদি বড় হয় !) হিসাবে বুঝতে চান তবে এটি সমাধান করার বিভিন্ন উপায় রয়েছে are

তুচ্ছ কিন্তু অ-সম্ভাব্য: প্রতিটি সম্ভাব্য সংখ্যার জন্য, ফাইলটি স্ক্যান করুন এবং দেখুন এটি সেখানে আছে কিনা।

512 এমবি র‌্যাম এবং ফাইলের মাধ্যমে একক পাস সহ: ফাইলটি থেকে পড়া প্রতিটি সংখ্যা চিহ্নিত করুন (= সেই সূচকে বিট সেট করুন) এবং তারপরে র্যামটি একবার পাস করুন এবং অনুপস্থিতগুলি দেখুন।


1
কিছু ভাল প্রশ্ন, তবে 32 বিট সিস্টেমটি অন্তর্নিহিত, ভাসমান বা হুজিভিগগুলি উপস্থাপন করছে কিনা তা এখনও 32 বিটগুলিতে কেবল 2 ^ 32 মান উপস্থাপন করতে পারে। যদি প্রশ্নটি "ওহ হ্যাঁ, আমরা 128 বিট আল্ট্রা-লংগুলিকে অনুমতি দিই", তবে প্রশ্নের 32 বিট আর্কিটেকচার "সীমাবদ্ধতা" ইচ্ছাকৃতভাবে বিভ্রান্তিকর। তবুও, ইন্টারভিউয়ারকে জিজ্ঞাসা করার জন্য একটি দুর্দান্ত প্রশ্ন, কারণ অনেকগুলি চশমা বিভ্রান্তিমূলক বা খারাপভাবে লেখা হয়। আপনার আসল সমাধানটি আমার মতো একটি বিটসেট।
user949300

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

0

একটি সাক্ষাত্কারে মনে রাখা সহজ এবং স্বাচ্ছন্দ্যে সহজ এমন একটি পদ্ধতিকে এই সত্যটি ব্যবহার করতে হবে যে আপনি যদি এন বিতে সমস্ত সংখ্যা দেখেন তবে প্রতিটি বিট সেই মানগুলির অর্ধেকের মধ্যে সেট করা হবে এবং অন্য অর্ধে সেট করা হবে না ।

আপনি যদি ফাইলের সমস্ত মানগুলিতে পুনরাবৃত্তি করেন এবং 32 টি মানগুলি শেষে রাখেন তবে আপনি 32 মানগুলি সমাপ্ত করবেন যা হুবহু (2 ^ 32/2) বা সেই মানের চেয়ে কিছুটা কম less সর্বাধিক পার্থক্য (2 ^ 32/2) এবং মোট আপনাকে মিস করা মানগুলির প্রতিটি অবস্থানে মোট বিট সেট করে।

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

উদাহরণস্বরূপ স্তন্যপান ব্যবহার করে, আপনার নিম্নলিখিত মান আছে:

1010
0110
1111
0111
1101
1001
0100
0101
0001
1011
1100
1110

প্রতিটি পদের মোট সেট বিটগুলি হ'ল:

7867

8 (4 ^ 2/2) এর থেকে বিয়োগগুলি আমরা পাই:

1021

যার অর্থ 4 নিম্নলিখিত মানের নিম্নলিখিত নিম্নলিখিত সম্ভাব্য সেট রয়েছে:

1000
0000
0011
0010

1010
0001
0010
0000

(আমি যদি কিছু মিস করি তবে আমাকে ক্ষমা করুন, আমি কেবল দৃষ্টিতে এটি করছি)

এবং তারপরে আবার মূল সংখ্যাগুলি দেখে, আমরা এখনি 1010 খুঁজে পেয়েছি যার অর্থ প্রথম সেটটি ছিল উত্তর।


তবে আপনাকে 4 টি সংখ্যা খুঁজে পেতে হবে, একটি নয়
ফ্রিডেভ

@ ফ্রিদেব আপনি সঠিক এটিই তাই করে। চার সংখ্যার একটি সেট চারটি সংখ্যা ... একটি সেটে।
জিমি জেমস

আকর্ষণীয়, কিন্তু আপনি চকচকে determine all the possible sets of 4 values that could give those totals। আমি সত্যিই মনে করি এটি সমাধানের একটি গুরুত্বপূর্ণ অঙ্গ যা আপনার উত্তরটি অনুপস্থিত। এটি সময় এবং স্থানের জটিলতাকেও প্রভাবিত করতে পারে।
অ্যালন গুরালেক

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

0

ধরে নিচ্ছি যে ফাইলটি ক্রমবর্ধমান সংখ্যার দ্বারা সাজানো হয়েছে:

নিশ্চিত করুন যে এটি edsণীতে (2 (-4) নম্বর রয়েছে।
এখন যদি ফাইলটি সম্পূর্ণ হয়ে থাকে (বা যদি 4 টি অনুপস্থিত সংখ্যা সর্বশেষ 4 টি ছিল), N পজিশনে ফাইলের কোনও শব্দ পড়লে মান মান N ফেরত আসত would

প্রথম অপ্রত্যাশিত সংখ্যা এক্স 1 খুঁজে পেতে অনুসন্ধানের জন্য [0..2³²-4-1) পজিশনে দ্বিদোকোষ অনুসন্ধান করুন।
এটির প্রথম নিখোঁজ নম্বরটি একবার খুঁজে পেয়ে, দ্বিতীয় নিখোঁজ সন্ধানের জন্য [এক্স 1 .. (2³²-4-1)] তে আবার দ্বিখণ্ডিত অনুসন্ধান করুন, এক্স 2: এবার, পজিশনে এন শব্দটি পড়ার সাথে মানের মানটি ফিরে আসবে যদি আর কোনও অনুপস্থিত নম্বর না থাকে (যেহেতু আপনি একটি অনুপস্থিত নম্বর পাস করেছেন)।
বাকি দুটি সংখ্যার জন্য একইভাবে ইটারেট করুন। তৃতীয় পুনরাবৃত্তিতে, N অবস্থানে N শব্দটি পড়া N-2 এবং চতুর্থ দিকে, এটি N-3 ফিরে আসা উচিত।

কেভেট: আমি এটি পরীক্ষা করিনি। তবে আমি মনে করি এটি কাজ করা উচিত। :)

এখন বাস্তব জীবনে, আমি অন্যান্য উত্তরের সাথে একমত: প্রথম প্রশ্নগুলি পরিবেশ সম্পর্কে হবে। আমাদের কাছে কি র‌্যাম অ্যাভেল রয়েছে (কতটা), সরাসরি অ্যাক্সেস স্টোরেজ ডিভাইসে থাকা ফাইলটি, এটি কি এক-শট অপারেশন (কোনও অপ্টিমাইজেশনের প্রয়োজন নেই) বা একটি সমালোচনামূলক (প্রতিটি চক্র গণনা) রয়েছে, আমাদের কি বাহ্যিক সাজানোর ইউটিলিটি উপলব্ধ আছে? ইত্যাদির
পরে প্রসঙ্গের জন্য গ্রহণযোগ্য একটি আপসটি সন্ধান করুন। এটি অন্তত দেখায় যে আপনি অ্যালগোরিদম সন্ধান করার আগে সমস্যাটি বিশ্লেষণ শুরু করেছেন।


-2

সমস্ত মানক প্রশ্নের মতোই সমাধানটি হ'ল ইন্টারভিউয়ের আগে তাদের গুগল করা।

এই সংখ্যা এবং প্রকরণের সমস্ত সংখ্যা জোরিংয়ের সাথে জড়িত একটি খুব নির্দিষ্ট 'সঠিক' উত্তর রয়েছে। এটি আপনাকে ডাটাবেস বা কিছুতে সূচিগুলি বোঝার জন্য দেখানোর কথা। সুতরাং যে কোনওটির জন্য শূন্য পয়েন্ট 'কাজ করতে পারে তবে এটি কাগজে যা বলে না তা উত্তর দেয় না ri

প্লাস পাশে এই প্রশ্নগুলির একটি সীমাবদ্ধ সেট রয়েছে কয়েক ঘন্টা পুনর্বিবেচনা আপনাকে বুদ্ধিমানের মতো দেখায়। ভেবে মনে রাখবেন আপনি এটি আপনার মাথায় কাজ করছেন।

সম্পাদনা করুন। আহহ এটি 4 টির জন্য মনে হয় XOR এর চেয়ে আলাদা পদ্ধতির রয়েছে

http://books.google.com/books?id=415loiMd_c0C&lpg=PP1&dq=muthukrishnan%20data%20stream%20algorithms&hl=el&pg=PA1#v=onepage&q=muthukrishnan%20data%20stream%20algorithms&f=false

সম্পাদনা করুন। ডাউনভোটার্স: এটি ওপিতে বর্ণিত সঠিক সমস্যার সমাধান হ'ল একটি প্রকাশিত পাঠ্যপুস্তক ও (এন)।


1
উল্লেখযোগ্যভাবে, এই লিঙ্কযুক্ত বইটি সমস্ত স্ট্রিম প্রক্রিয়াজাতকরণ সম্পর্কিত। বিশেষত, সীমাবদ্ধতার মধ্যে স্ট্রিম প্রসেসিং। তাই বলা হয়, আমি অবশ্যই হবে বিশ্বাস করি যে এই প্রশ্ন ওপি দেখেনি মূল হল যেহেতু এটি অন্যথায় চমত্কার তুচ্ছ হয়। আরও উল্লেখযোগ্যভাবে, আপনি আসলে প্রশ্নের উত্তর দেননি have আপনি যদি দৃinc়তার সাথে এটিকে "আসল" বা "উদ্দেশ্য" প্রশ্ন হিসাবে পোস্ট করতে এবং সমাধানটির ব্যাখ্যা দিতে পারেন তবে আপনার কাছ থেকে আমার কাছে +1 থাকবে ... তবে, এটি যেমনটি হয় তেমন কোনও উত্তর দেয় না।
এসভিডজেন

1
এই উত্তরটি (একটি সাক্ষাত্কারে) কেবল দেখায় যে আপনি বইটি পড়েছেন। আপনার দক্ষতা বা চিন্তা প্রক্রিয়া সম্পর্কে কিছুই। এবং কোনও সাক্ষাত্কারের আগে আপনি কীভাবে " সমস্ত মানক প্রশ্নগুলি গুগল করবেন" ? "একটি সাক্ষাত্কারে জিজ্ঞাসা করা সমস্ত প্রশ্ন" এর কিছু সীমাবদ্ধ তালিকা আছে যা আমি মিস করেছি?
user949300

1
@ উপন্যাস এটি ভাল প্রার্থী নিয়োগের অসুবিধাও বোঝায়! যদি "ভাল" সাধারণ সাক্ষাত্কারের প্রশ্নগুলির জন্য সহজভাবে প্রস্তুত থাকে ... তবে এমন কাউকে ভাড়া দেওয়া কঠিন হয়ে যায় যে আমার ব্যবসায়ের সমস্যাগুলি সমাধান করতে পারে?
এসভিডজেন

1
@ ইউয়ান স্পষ্ট করে বলতে গেলে, আমি আমার ভুল বিরামচিহ্নগুলি নিয়ে মজা করছিলাম । ... যাই হোক না কেন, মনে রাখবেন, আমি আমার দিনে বেশিরভাগ কাজের অফার পেয়েছি এমনকি মানক প্রশ্ন এবং উত্তরগুলির সম্পর্কে একেবারেই অসতর্ক হয়েও। এবং এখন একজন নিয়োগকারী পরিচালক হিসাবে আমি আপনাকে প্রতিশ্রুতি দিতে পারি আমি আবৃত্তির উত্তর চাই না ... যদিও, আমি বুঝতে পারি যে কিছু পরিচালকের আলাদা আলাদা প্রয়োজন হবে।
এসভিডজেন

1
@Ewan আমিও আরও একটি জিনিস নির্মল উচিত, অভিপ্রেত যেন আমার স্বন পেয়েছি করা হয় নি: আপনি উচিত আপনার উত্তর সংশোধন আসলে দাবী করে যে, লিঙ্ক-টু বই সমস্যা "অভিপ্রেত প্রশ্ন।" এবং তারপর প্রশ্নের উত্তর ! ... আপনি নিঃসন্দেহে হবে আমার +1, এবং প্রচুর অন্যদের, এবং ফলে জন্য ওপি সাহায্যের সন্তুষ্টি আছে।
এসভিডজেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.