Skip to main content

আপনার কোডিং সাক্ষাত্কারের সমাধানের 3 উপায় - যাদুঘর

How to Build Innovative Technologies by Abby Fichtner (জুন 2025)

How to Build Innovative Technologies by Abby Fichtner (জুন 2025)
Anonim

সুতরাং আপনি সেখানে আছেন। অব্যাহতিপ্রাপ্ত. ক্লান্ত। অবশেষে আপনি আপনার ইন্টারভিউয়ার আপনাকে জিজ্ঞাসা করে এমন জটিল কোডিং প্রশ্নটি সমাধান করার জন্য একটি উপায় নিয়ে এসেছেন। সম্ভবত আপনি এটি হোয়াইটবোর্ডে লিখেছেন, লাইনে লাইন। এবং আপনি ভাল সময় করেছেন! আপনি বৈঠকের মাত্র 20 মিনিটের মধ্যে রয়েছেন। আপনার সাক্ষাত্কারকারীর মুগ্ধ হতে হবে।

রাইট?

"এটি কাজ করবে, তবে কীভাবে এটি আরও দক্ষতার সাথে করা যায় তার জন্য কোনও ধারণা?"

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

এটি প্রায় প্রত্যেকের সাথেই ঘটে। এবং তারা বোকা কারণ এটি নয়। এটি কারণ বেশিরভাগ লোকের কাছে তাদের অ্যালগোরিদমের দক্ষতা বৃদ্ধির কোনও পদ্ধতি নেই।

তবে সত্যটি হচ্ছে, প্রচুর পরিমাণ রয়েছে। পরের বার যখন আপনি স্ট্যাম্পড হবেন তখন এই তিনটি সাধারণ পদ্ধতির প্রয়োগ করার চেষ্টা করুন।

1. একটি হ্যাশ মানচিত্র ব্যবহার করুন

সেটা ঠিক. হ্যাশ ম্যাপস / এসোসিয়েটিভ অ্যারে / অভিধানগুলি (আপনি যে প্রোগ্রামিং ভাষাটি ব্যবহার করছেন তার উপর নির্ভর করে তারা অনেক নাম দিয়ে যান) অ্যালগরিদমের রানটাইমকে নামিয়ে আনার একটি যাদুকর ক্ষমতা রয়েছে।

উদাহরণস্বরূপ, ধরুন যে প্রশ্নটি ছিল একটি সংখ্যার অ্যারেতে সর্বাধিক পুনরাবৃত্তি সংখ্যাটি খুঁজে পাওয়া।

আপনার প্রথম চিন্তাটি হতে পারে কিছু লুপগুলিতে ঝাঁপ দেওয়া। আমাদের প্রতিটি সংখ্যার জন্য, এর গণনাটি বের করুন এবং দেখুন এটি সবচেয়ে বড় কিনা। আমরা প্রতিটি সংখ্যার জন্য গণনা কীভাবে পাব? অ্যারে দিয়ে লুপ করুন, গণনা হয় কতবার এটি ঘটে! সুতরাং আমরা দুটি নেস্টেড লুপ সম্পর্কে বলছি। সিউডোকোডে:

Def get_mode (সংখ্যা): সর্বোচ্চ_কাউন্ট = 0 মোড = সংখ্যায় সম্ভাব্য_মোডের জন্য নাল: আমাদের_রেতে সংখ্যার জন্য গণনা = 0: গণনা + = 1 যদি গণনা> = সর্বোচ্চ_কাউন্ট: মোড = সম্ভাব্য_মোড ম্যাক্স_কাউন্ট = কাউন্ট রিটার্ন মোড

এখনই, অ্যারে প্রতিটি আইটেমের জন্য আমরা একবার আমাদের পুরো অ্যারেটি লুপ করছি - তবে আমরা আরও ভাল করতে পারি do বড় হে সংকেতক্রমে, এটি মোট ও (এন 2 ) সময়।

যদি আমরা আমাদের গণনাগুলিকে একটি হ্যাশ মানচিত্রে (তাদের গণনাগুলিতে নম্বরগুলি ম্যাপিং) সংরক্ষণ করে রাখি তবে আমরা অ্যারে (ও (এন) সময়!) দিয়ে কেবল একটি হাঁটার মধ্যেই সমস্যাটি সমাধান করতে পারি:

Def get_mode (সংখ্যা): সর্বাধিক গণনা = 0 মোড = নাল গণনা = নতুন হ্যাশম্যাপ, প্রতিটি মানকে সংখ্যায় সম্ভাব্য_মোডের জন্য 0 থেকে শুরু করে: গণনা + = 1 যদি গণনা করা হয়> সর্বোচ্চ_উত্তর: মোড = সম্ভাব্য_মোড সর্বোচ্চ_কাউন্ট = গণনা রিটার্ন মোড

অনেক দ্রুত!

2. বিট ম্যানিপুলেশন ব্যবহার করুন

এটি আপনাকে সত্যই প্যাক থেকে আলাদা করবে। এটি প্রতিটি সমস্যার ক্ষেত্রে প্রযোজ্য না, তবে আপনি যদি এটি আপনার পিছনের পকেটে রাখেন এবং সঠিক সময়ে এটি আবদ্ধ করেন তবে আপনি রকস্টারের মতো দেখবেন।

এখানে একটি উদাহরণ রয়েছে: ধরুন আমাদের সংখ্যার একটি অ্যারে রয়েছে, যেখানে প্রতিটি সংখ্যা দু'বার প্রদর্শিত হয়, কেবলমাত্র একবারে ঘটে যাওয়া একটি সংখ্যা ব্যতীত। আমরা নিঃসঙ্গ, পুনরাবৃত্তি সংখ্যা খুঁজে বের করার জন্য একটি ফাংশন লিখছি।

আপনার প্রথম প্রবৃত্তিটি হ্যাশ মানচিত্র ব্যবহার করা হতে পারে, যেহেতু আমরা এটি সম্পর্কে কেবল কথা বললাম। এটি একটি ভাল প্রবৃত্তি! এবং এটি এটির জন্য কাজ করবে। আমরা একটি খুব অনুরূপ "গণনা" মানচিত্র তৈরি করতে পারি এবং কোন সংখ্যাটি 1 এর গণনা দিয়ে শেষ হয় তা দেখতে এটি ব্যবহার করতে পারি।

তবে এর থেকে আরও ভাল উপায় আছে। আপনি যদি বিট কারসাজির সাথে পরিচিত হন তবে আপনি XOR এর সাথে পরিচিত হতে পারেন। এক্সওর সম্পর্কে বিশেষ একটি বিষয় হ'ল আপনি যদি নিজের সাথে একটি সংখ্যা এক্সওর করেন তবে বিটগুলি "বাতিল হয়ে যায়" থেকে 0 এ। এই সমস্যার জন্য আমরা যদি অ্যারের প্রতিটি সংখ্যা একসাথে জোর করে থাকি তবে আমরা একটি সংখ্যাটি রেখে যাব না বাতিল হবে না:

ডিফ সন্ধান_আনরেপিত (সংখ্যা): অপরিবর্তিত = 0 সংখ্যায় নম্বরের জন্য: অপরিবর্তিত = অপরিবর্তিত এক্সওর নাম্বার প্রত্যাবর্তন অপরিবর্তিত

3. নীচে যান

একটি ফাংশন লিখুন যা "nth" ফিবোনাচি নম্বরটি দেয়, একটি নম্বর এন দেওয়া হয়েছে। এটি একটি সর্বোত্তম, এবং এটি নিজেকে পুনরাবৃত্তি করতে খুব সুন্দরভাবে ঘৃণা করে:

ডিফ ফাইব (এন): যদি এন 0 বা 1 হয়: 1 রিটার্ন ফাইব (এন-1) + ফাইব (এন -2) রিটার্ন করুন

তবে সরল পুনরাবৃত্ত উত্তর একটাই নয়! এই ফাংশনটি কী করে তা সাবধানতার সাথে ভাবুন। ধরুন এন হ'ল ৫ টি উত্তর পাওয়ার জন্য, এটি পুনরাবৃত্তভাবে ফাইব (4) এবং ফাইব (3) কল করে। এখন, ফাইব (4) এর কলটি কী করে? এটি ফাইব (3) এবং ফাইব (2) কল করে। তবে আমরা কেবল বলেছিলাম যে আমাদের কাছে ইতিমধ্যে ফাইব (3) এ কল ছিল! এই সুন্দর পুনরাবৃত্তি ফাংশন অনেক পুনরাবৃত্তি কাজ করে। মোট সময় ব্যয় O (2 এন ) হিসাবে পরিণত হয়। এটি খারাপ (ও 2 (এন 2 ) এর চেয়ে খারাপ।

এন থেকে পুনরাবৃত্তভাবে 1 এ নেমে যাওয়ার পরিবর্তে 1 থেকে n এ "নীচে-আপ" চলুন। এটি আমাদের পুনরাবৃত্তি এড়াতে দেয়:

ডিফ ফাইব (এন): পূর্ববর্তী = 0 পূর্ববর্তী_প্রশ্ন = 1 আমার জন্য 1 থেকে n এর মধ্যে রয়েছে: বর্তমান = পূর্ববর্তী + পূর্ববর্তী পূর্ববর্তী পূর্ববর্তী_ পূর্ববর্তী = পূর্ববর্তী = বর্তমান রিটার্ন বর্তমান

কোডটি দীর্ঘ, তবে এটি আরও কার্যকর! ডাউন টু ও (এন) সময়। আনারোলিং পুনরাবৃত্তাকার অ্যালগরিদমগুলির সাথে একটি যুক্ত বোনাস হিসাবে, আমরা স্থান সংরক্ষণ করি। এই সমস্ত পুনরাবৃত্ত কলগুলি কল স্ট্যাকটিতে তৈরি হয় যা স্মৃতিতে বসে এবং আমাদের স্থানের ব্যয়কে গণনা করে। আমাদের পুনরাবৃত্তির ক্রিয়াকলাপের একটি ও (এন) স্থানের ব্যয় ছিল তবে এই পুনরাবৃত্তিকে ও (1) স্থান লাগে।

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