একজন প্রোগ্রামারকে মেমরি থেকে কুইকসোর্ট / মার্জসর্ট অ্যালগরিদম কীভাবে প্রয়োগ করতে হয় তা জানা কতটা গুরুত্বপূর্ণ? [বন্ধ]


58

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

আমি যখন কুইকসোর্ট এবং মার্জসোর্ট বাস্তবায়নের অনুধাবন করার চেষ্টা করেছি, তখন আমার কাছে ঘটেছিল যে যদিও আমি একটি জীবিকার জন্য প্রোগ্রামিং করি এবং নিজের কাজকে আমি শালীন মনে করি, সেই অ্যালগোরিদমগুলি ছাড়া আমার বাস্তবায়ন করার জন্য আমার কাছে ফটোগ্রাফিক মেমরি বা তীব্র ব্রেইন পাওয়ার নেই have আমার নোট উপর নির্ভর করে। আমার মনে পড়ে সমস্তটি হ'ল those অ্যালগরিদমগুলির কিছু স্থিতিশীল এবং কিছু নেই। কেউ কেউ O (nlog (n)) বা O (n ^ 2) শেষ করতে সময় নেয়। কিছু অন্যদের চেয়ে বেশি স্মৃতি ব্যবহার করে ...

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


13
আপনার মনে রাখতে হবে যে একটি সমাধান বিদ্যমান এবং কখন এটি ব্যবহার করবেন। তারপরে ডক্সে যান এবং এটি প্রয়োগ করুন। আপনি যদি কুইকসোর্ট বা একত্রীকরণ সম্পর্কে জানতেন না, আপনি এখনও বুদবুদ ব্যবহার করতে এবং আপনার প্রোগ্রামটি একটি ক্রল দেখতে এবং ডেটা বৃদ্ধি পেলে সাবপার সমাধানগুলি নিয়ে এসেছেন।
পিটার বি

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

3
আমি নিশ্চিত যে ঘন ঘন অফলাইনে থাকার কারণে এই অ্যালগোস মুখস্থ করা জরুরী। : o
লি জেমস

তাদের দক্ষতা, কেস ইত্যাদি ব্যবহার সম্পর্কে আপনার জানা দরকার them কীভাবে হৃদয় দিয়ে এগুলি প্রয়োগ করা যায় তা জেনে রাখা এমন একটি বিষয় যা কেবলমাত্র ইন্টারভিউতে টেক সংস্থাগুলির প্রয়োজন।
সাকিস্ক

@ পিটারবি, আমি একমত নই গুগলকে 'একত্রীকরণ' এবং 'কুইকসোর্ট' সম্পর্কে 'বেস্ট পারফর্মিং বাছাই অ্যালগরিদম'
হাইয়ানকভ

উত্তর:


117

আসুন অ্যালবার্টকে জিজ্ঞাসা করি এবং দেখুন এই বিষয়ে তাঁর কী বক্তব্য রয়েছে:

"আমার সবকিছু জানার দরকার নেই, আমার যখন প্রয়োজন হবে তখন এটি কোথায় সন্ধান করতে হবে তা জানতে হবে"

- আলবার্ট আইনস্টাইন , প্যারাফ্রেসড

আমিন, ভাই অ্যালবার্ট, আমেন।

কোনও নির্দিষ্ট শৃঙ্খলে (বাছাই করুন, অনুসন্ধান করুন, যাই হোক না কেন) প্রয়োজনীয় অ্যালগরিদমের একটি ভাল জরিপ তৈরি করার পরে আপনি বাস্তবায়নের বিবরণটি ভুলে যেতে পারবেন যতক্ষণ না আপনার আসলে অ্যালগো প্রয়োজন হয়, আপনি যদি সন্ধান না করেন বা ব্যবহার না করেন preexisting lib। 25 বছর আগে আমি বি *-ট্রি ব্যবহার করে একটি বড় সার্চ সিস্টেম তৈরি করেছি, তবে সেগুলি আরও ভালভাবে ব্যবহার করার জন্য আজ আরটিএফএমের দরকার হবে।



9
কিভাবে যে প্রশ্নের উত্তর দেয়? তিনি বলেন, "আমি সব কিছু জানতে প্রয়োজন হবে না", তিনি যা কিছু করেছিলেন না বলুন "আমি কিছু জানি প্রয়োজন হবে না"। কিছু দক্ষতা মৌলিক, এবং পুরো প্রশ্নটি ছিল একটি নির্দিষ্ট অংশের তথ্য মৌলিক দক্ষতার বিভাগের কিনা।
কনরাড রুডল্ফ

1
লক্ষ্যটি হল কুইকোর্টটি মুখস্থ করে তোলা হচ্ছে প্রশ্নের বিন্দুটি মিস করা। অবশ্যই, আসল বিশ্বে আপনার যদি জেনেরিক কুইকোর্টের প্রয়োজন হয় তবে আপনি লাইব্রেরির রুটিন ব্যবহার করতে পারেন বা কোডটি সন্ধান করে এটি অনুলিপি করতে পারেন। পরীক্ষাটি দেখুন আপনি পুনরাবৃত্তি, লুপ আক্রমণকারী ইত্যাদি বুঝতে পারেন কিনা এবং আপনাকে দ্রুত একটি সাজানো অ্যালগরিদম লিখে ফেলতে বলা সেই জ্ঞানের সত্যই সাধারণ প্রদর্শন। আপনি যদি ঘটনাস্থলে 20-লাইনের কুইকোর্টটি পুনরায় প্রাপ্ত করতে সক্ষম না হন তবে আপনি কতটুকু নিয়মিতভাবে অজান্তেই বা অজান্তে সত্যিই অজান্তেই করছেন?
ল্যারি গ্রিটজ

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

2
@ ম্যাট্টনজ: আপনার "ও (সাইজিং") এর কিছুটা বিচলিত ফলোআপ। একটি জিনিস যা আমি কঠিনভাবে শিখেছি তা হ'ল বড় ডেটাসেটের সাথে খারাপ লোকাল রেফারেন্সটি ও () কে পুরোপুরি পরাভূত করতে পারে। আপনার একটি অ্যালগো থাকতে পারে O(n log n), তবে আপনি যদি ক্যাশে প্রচুর পরিমাণে মিস করেন বা (Godশ্বর নিষেধ করেন) আপনি ডিস্কটিকে হিট করেন তবে n log nতা কেবল স্মৃত স্মৃতি।
পিটার রোয়েল

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

  2. সমস্ত প্রোগ্রামিং চাকরি এক নয়। কিছু কাজের জন্য অ্যালগরিদমগুলির গভীর জ্ঞান প্রয়োজন, কারও কারও কাছে টাইপ থিওরি বোঝার লোকদের প্রয়োজন এবং কিছুকে কেবলমাত্র লোকের প্রয়োজন যা একটি ওয়েব ফর্ম থেকে ডেটা স্ক্র্যাপ করে ডেটাবেসে স্থানান্তরিত করতে পারে। কিছু কাজ এমনকি একবারে সমস্ত দক্ষতা প্রয়োজন। আপনি কোন ধরণের কাজ করতে চান?


5
আমি মনে করি না যে কুইকসোর্টটি মনে না রেখে কুইকসোর্ট বোঝা সম্ভব। এটি কোনও জটিল এবং তীক্ষ্ণ জিনিস নয়, এটি কেবল দুটি জেনেরিক ধারণা একত্রিত। একই জিনিসটি মার্জ-সাজানোর ক্ষেত্রে প্রযোজ্য, তবে সেখানে আপনার কেবল একটি ধারণা রয়েছে: পি
drxzcl

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

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

@ চার্লসই.গ্রান্ট বেশিরভাগ সময় ইন্টারভিউয়ার আপনার কাজ করার জন্য দক্ষতা পেয়েছিল কিনা তা পরীক্ষা করে না (আমাকে জিজ্ঞাসা করা শেষ জাভাস্ক্রিপ্ট / সিএসএসের প্রশ্ন মনে করতে পারি না এবং আমি ওয়েব অ্যাপস করি)।
আইএডাপ্টার

10

আমার মনে হয় আপনি যখন স্পটটিতে উত্তর নিয়ে আসতে হবে এবং বাইরের কোনও সংস্থান নেই তখন কোনও কাজের জন্য আবেদন করার সময় আপনার কেবলমাত্র এটি মনে রাখা দরকার।

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

যখন আমাদের সেই অ্যালগরিদমগুলি মনে রাখার দরকার পড়ে তবে আমরা সাধারণত গুগল বা কোনও বইয়ের দিকে ফিরি এবং সাধারণত এটি কোনও নির্দিষ্ট প্রয়োগের সন্ধান করে না, তবে আমাদের সমস্যার সর্বোত্তম বাস্তবায়ন কী হবে।


6

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

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

সংক্ষেপে, আপনি কী সন্ধান করেন এবং কোথায় রেফারেন্সগুলি রয়েছে তা জানার পক্ষে সর্বদা ভাল which যা আপনাকে উত্সটিতে পরিচালিত করবে।


5

সঠিক বাস্তবায়ন খুব গুরুত্বপূর্ণ নয়। তবে মার্জোর্ট / কুইকোর্টের পিছনের মূলনীতি - পুনরাবৃত্তি, পার্টিশন ইত্যাদিসমূহ খুব মৌলিক এবং প্রতিটি প্রোগ্রামারকে বুঝতে হবে। এই অ্যালগরিদম একবার বুঝতে পারলে শব্দগুলিতে বর্ণনা করা খুব সহজ।

আপনি এটি সন্ধান করতে পারেন বা আপনি এটি গুগল করতে পারেন কিনা তা আসলেই সমস্যা নয়, প্রোগ্রামার এই সমস্যা সমাধানের কৌশলগুলি বোঝেন এবং অন্যান্য পরিস্থিতিতে প্রয়োগ করতে সক্ষম কিনা তাও is


3

আমি এই বিষয়ে দুটি মনের। আমি অনেক প্রোগ্রামারকে জানি যারা একটি বাছাই করা অ্যালগরিদম কী তা জানেন না তবে তাদের কাজটি বেশ ভালভাবে করে। ডোমেনটি সত্যিকার অর্থে বোঝার জন্য আমি নীতিগুলি বোঝার ক্ষেত্রেও বিশ্বাস করি।

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

এই চমকপ্রদ উত্তরের সংক্ষিপ্তসারে: অবশ্যই API টি ব্যবহার করুন (এনআইএইচ বিকাশকারী অপরিপক্কতার লক্ষণ), তবে সর্বদা অন্তর্নিহিত নীতিগুলি বুঝতে পারেন। আশা করি এটা কাজে লাগবে.


2

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

শ্রেণীবিভাজন

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

খোঁজ

  • যতগুলি অনুসন্ধান অ্যালগরিদম আপনি পারেন তার নাম দিন।
  • দুটি অনুসন্ধান অ্যালগরিদমের তুলনা / বিপরীতে করুন।
  • রৈখিক অনুসন্ধান ব্যতীত অন্য কোনও অনুসন্ধানের স্কেচ করুন।

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


আমি ভাবতাম যে সাক্ষাত্কারগুলিতে প্রোগ্রাম করার জন্য লোকদের জিজ্ঞাসা করা নির্বুদ্ধি, তবে আপনি আপাতদৃষ্টিতে চমত্কার পুনঃসূচনা সহ এমন লোকের সংখ্যা বিশ্বাস করবেন না এবং যারা "সামাজিক" প্রশ্নের উত্তরগুলি উড়ন্ত রঙের সাথে দিয়েছেন, তবে তাদের জীবনের জন্য কে পারেন না 'স্ট্রিকাট' বা অন্য কোনও সাধারণ ফাংশনটির সঠিক প্রয়োগটি লিখুন। বেশ কয়েকবার এটি আমাকে এমন কাউকে নিয়োগ দেওয়ার হাত থেকে বাঁচিয়েছে যিনি যদি নির্বোধ কোডিং প্রশ্নের পক্ষে না থেকে থাকেন তবে অন্তহীন দুঃখ ঘটাতে পারতেন এবং দলটিকে অক্ষমতায় টেনে নামিয়ে আনতে পারতেন।
ল্যারি গ্রিটজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.