শিল্পে কাজ করার সময় কি বিগ-ও সত্যই প্রাসঙ্গিক?


65

আমি যে প্রতিটি সাক্ষাত্কারে এসেছি, তাতে জটিলতার গাণিতিক বিশ্লেষণে আমার কাছে কুইজ করা হয়েছে, বিগ-ও স্বরলিপি সহ।

শিল্পে উন্নয়নের জন্য বিগ-ও বিশ্লেষণ কতটা প্রাসঙ্গিক? আপনি সত্যিই এটি কত ঘন ঘন ব্যবহার করেন এবং সমস্যার জন্য সম্মানিত মানসিকতা থাকা কতটা প্রয়োজনীয়?


5
@ এমএম01 আমি এটি উচ্চ বিদ্যালয় এবং বিশ্ববিদ্যালয়ে অধ্যয়ন করেছি। যদিও আমি এটিকে একটি প্রোগ্রামার জ্ঞানের একটি বিল্ডিং ব্লক হিসাবে স্বীকৃতি দিয়েছি, আমি কখনই এটি আমার কোনও কাজের ক্ষেত্রে ব্যবহার করি নি।
12:53 এ সিস্টেমে সিম্পল্ট করুন

27
এটি জিজ্ঞাসা করার সময় আপনি কোন সঠিক শিল্পের কথা ভাবছেন? আপনি কি চান্দ্র রোভার, বা ব্লগিং প্ল্যাটফর্মের জন্য নিয়ন্ত্রণ কোড লিখছেন?
টিম পোস্ট

14
@ সিস্টেম্পন্টোআউট, আপনি কখনও কখনও একটি অ্যালগরিদম পছন্দ করেননি যা অন্যটির চেয়ে দ্রুত ছিল কারণ এটি দ্রুত ছিল?


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

উত্তর:


76

আমার প্রশ্ন, শিল্পের বিকাশের সাথে এই পরীক্ষাটি কতটা প্রাসঙ্গিক?

স্কেবলযোগ্য অ্যালগরিদম, অ্যাপ্লিকেশন এবং সিস্টেমগুলি ডিজাইনের জন্য কম্পিউটেশনাল জটিলতার তত্ত্বের (যেমন বিগ ও নোটেশন) একটি দৃ understanding় বোঝা প্রয়োজনীয় essential যেহেতু স্কেল্যাবিলিটি শিল্পে কম্পিউটিংয়ের জন্য অত্যন্ত প্রাসঙ্গিক, তাই বড় ও স্বরলিপিটিও।

আপনি এটি প্রায়শই কীভাবে ব্যবহার করেন এবং সমস্যার জন্য সম্মানিত মানসিকতা থাকা কতটা প্রয়োজন?

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

( জটিলতার তত্ত্বের দৃ understanding় উপলব্ধি না করে ধারাবাহিকভাবে স্কেলযোগ্য সিস্টেমগুলি প্রয়োগ করা সম্ভব কিনা তা আমি জানি না I আমি ভাবতে চাই না যে এটি নয়))


+1 কারণ নীতিগুলি গুরুত্বপূর্ণ। আমার শিল্পের অভিজ্ঞতায়, এটি বিবেচনায় নেওয়ার বিষয়টি বিবেচনা করা, কোনও বড় বিষয় বিবেচনার জন্য কিছু নয়। এটি বলেছিল - এটি আপনাকে (উদাহরণস্বরূপ) তালিকা সন্নিবেশ বনাম অ্যারে সন্নিবেশ, বা বুদ্বুদ সাজানো বনাম কুইকোর্টের সাথে তুলনা সম্পর্কে জিজ্ঞাসা করা হবে তবে ইন্টারভিউর আপনার জ্ঞানটি প্রকাশ করতে লক্ষ্য করছে। আপনি এমনকি জটিলতা / রান-টাইম / স্কেলাবিলিটি / পারফরম্যান্স সম্পর্কে যদি ভাবেন তবে একটি প্রশংসা পান। আপনি যদি এই বিষয়গুলি সম্পর্কে / চিন্তা করতে না পারেন তবে কিছু কাজ হবে যা আপনি কীভাবে ভাল করবেন তা আপনি জানেন না। বিরল, তবে এটি সময়ে সময়ে আসে না।
তাড়াতাড়ি_

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

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

@ টিম পোস্ট - আমি বলেছিলাম "... ধারাবাহিকভাবে স্কেলযোগ্য সিস্টেমগুলি প্রয়োগ করুন ..."। নিশ্চিত আপনি ভাগ্যবান পেতে পারেন, কিন্তু আপনি নিয়মিত ভাগ্যবান পেতে পারবেন না। তবে আমি এটি মেনে নিতেও প্রস্তুত আছি যে সত্যই স্মার্ট / অভিজ্ঞ ব্যক্তি কোনও পাঠ্য পুস্তক বা কম্পিউটার বিজ্ঞান কোর্সের কাছাকাছি না গিয়ে জটিলতার একটি স্বজ্ঞাত বোধ তৈরি করতে পারে।
স্টিফেন সি

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

36

এর কারণ হ'ল এটি স্কেলিবিলিটি নির্দেশ করে ।

ও (এন ^ 2) এমন একটি প্রক্রিয়া ও (এন লগ এন) এর চেয়ে খারাপ স্কেল করবে তবে ও (এন ^ 3) বা এমনকি ও (এন!) এর চেয়েও ভাল।

আপনি যদি পার্থক্যগুলি জানেন না এবং সেগুলি কখন প্রয়োগ হয়, আপনি কার্যকারিতাটির সঠিক বাস্তবায়ন বেছে নেওয়ার পাশাপাশি উত্পাদন কর্মক্ষমতাতে পরীক্ষামূলক পারফরম্যান্সকে এক্সট্রাপোলটিংয়ের জন্য কম উপযুক্ত।


সম্পাদনা: http://www.codinghorror.com/blog/2007/09/everything-is-fast-for-small-n.html থেকে n ^ 3 এর সাথে 48n এর একটি তুলনা (যা ঘুরে দেখা যায় প্রোগ্রামিং পার্লস থেকে)

এখানে চিত্র বর্ণনা লিখুন


8
+1: আপনার প্রক্রিয়াটি স্কেল হয় না তা খুঁজে পাওয়ার সবচেয়ে খারাপ উপায় হ'ল চিৎকারকারী গ্রাহকদের একসাথে সমস্ত কিছু দেখাতে হবে।
ল্যারি কোলেম্যান

22
@ ল্যারি, গ্রাহকের সংখ্যার সাথে কমপক্ষে চিৎকার চিৎকার করুন!

10
ঠিক আছে, আমি অনুমান করি যে কেবল বিগ-ও কতটা গুরুত্বপূর্ণ তা দেখায়: শব্দটি আসলে O(log Customers)ডিবি।
এমসাল্টারস

4
@MSalters, ঠিক আছে, আমি সংশোধন করেছি: " NUMBER টি চিৎকার এর গ্রাহকদের নম্বর দিয়ে সুসংগত স্কেল"। শব্দ স্তর একটি পৃথক বিষয়।

1
@ থরবজর্ন রাভন অ্যান্ডারসন: আমি কিছু গবেষণা পড়েছি যা বোঝায় যে এটি একটি লোগারিথমিক স্কেল বেশি, যার কারণেই গ্রাহকের অভিযোগের কয়েকটি শ্রেণির অভিযোগ এত গুরুত্বপূর্ণ! তারা সূচিত করে যে, গ্রাহক বেস যত বৃহত্তর, আরও অনেক লোকের সমস্যা রয়েছে এবং তারা কিছুই বলছেন না বা প্রতিযোগিতায় যাচ্ছেন।
স্টিভেন এভার্স

32

এটি আপনার কাজগুলির উপর নির্ভর করে।

ওয়েব বিকাশকারীদের জন্য (যেমন আমার মতো) এটি সাধারণত অনেকটাই গুরুত্বপূর্ণ। আপনি ওয়েব অ্যাপ্লিকেশন স্কেল করতে চান। যদি আপনার অ্যাপ্লিকেশনটিতে একটি বাধা রয়েছে যা হে (এন sc 2) এর সাথে স্কেল করে এবং আপনার মনে হয় এটি ঠিক আছে, কারণ আপনার সার্ভার একযোগে 1000 একসাথে ব্যবহারকারীদের পরিচালনা করতে পারে, মনে হয় আপনার যত্ন করার দরকার নেই। জিনিসটি হ'ল, দ্বিগুণ হিসাবে হ্যান্ডেল করার জন্য (যা পুরো রাত্রে ঘটনাক্রমে সম্ভাব্য) এটি আপনাকে চারগুণ গণ্য শক্তি প্রয়োজন হবে। আদর্শভাবে আপনি ওয়েব অ্যাপ্লিকেশনগুলিকে O (n) এ স্কেল করতে চান কারণ হার্ডওয়্যারটি বুদ্ধিমান ধ্রুবক ব্যবহারকারী / সার্ভার অনুপাতের তুলনায় সস্তা।

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

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


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

21

আমি আসলে আমার কর্মজীবনে নিয়মটি আনুষ্ঠানিকভাবে প্রয়োগ করি নি।

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

বিধিটি হ'ল:

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


10

ঠিক আছে, সম্ভবত একটি ছোট গল্প আপনাকে আলোকিত করে কেন এটি নির্ধারিতভাবে প্রয়োজনীয়:

যে প্রকল্পে আমি কাজ করছি সেখানে একটি প্রোগ্রাম ছিল যাবতীয় নথি ছাপানোর জন্য দায়ী ছিল (লেবেলগুলি, তালিকা বাছাই তালিকা ইত্যাদি) এই প্রোগ্রামে দুটি অংশ রয়েছে, একটি হ'ল ডাটাবেস থেকে সমস্ত প্রয়োজনীয় ডেটা পড়া এবং এটি একটিতে লেখা .ini- শৈলীর ফাইল এবং অন্য একটি অংশ যা সেই ফাইলগুলি পড়ে এবং এটি টেম্পলেটগুলিতে পূরণ করে। এটি লেবেল এবং ছোট তালিকার জন্য যুক্তিসঙ্গতভাবে ভাল কাজ করেছে (কেবলমাত্র কয়েকটি ক্ষেত্র সহ) তবে এটি প্রায় 10 মিনিটের জন্য দৌড়েছিল যখন ~ 20 পৃষ্ঠাগুলির একটি "বৃহত" তালিকা মুদ্রণ করতে হয়েছিল। কারণ এই ইন-ফাইলগুলিতে অ্যাক্সেসের ফলে ও (n²) অ্যাক্সেসের সময়, n মুদ্রণের জন্য ক্ষেত্রের সংখ্যা হয়ে থাকে।

এই প্রোগ্রামের মূল প্রোগ্রামাররা ও-স্বীকৃতিটি বুঝতে পারলে তারা কখনই সেভাবে তৈরি করতে পারত না। সেই নির্বোধটিকে হ্যাশটেবলের সাথে প্রতিস্থাপন করা এটিকে আরও দ্রুততর soooooooo করে তুলেছিল।


8

বিগ-ও পারফরম্যান্স গুরুত্বপূর্ণ, তবে এটি বেশিরভাগ ক্ষেত্রে অভ্যন্তরীণ করা হয়েছে।

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

ফলস্বরূপ যে আনুষ্ঠানিক বিষয়গুলি খুব কমই অনুশীলনে আসে তবে অনুশীলনটি একই নীতিতে নির্মিত হয়।


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

6

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

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


5

নিজের কাছে মেমো!

আমি এবং আরও অনেকেই নিয়মিত নিজেকে এই প্রশ্নটি জিজ্ঞাসা করি।

আমি মনে করি আমরা এটি জিজ্ঞাসা করার আসল কারণ হ'ল কারণ আমরা অলস হয়েছি।

এই জ্ঞান কখনও তারিখ বা অপ্রচলিত হবে না। আপনি এটি প্রতিদিনের ভিত্তিতে সরাসরি প্রয়োগ করতে পারবেন না তবে আপনি অবচেতনভাবে এটি ব্যবহার করবেন এবং এটি আপনার নকশার সিদ্ধান্তগুলিতে ইতিবাচক প্রভাব ফেলবে। একদিন এটি আপনাকে বা অন্যকে কোডিংয়ের ঘন্টা এবং দিনগুলি সঞ্চয় করতে পারে।

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


5

আসলে তা না. মূলত ডাটাবেস অ্যাক্সেস করার সময় কেবলমাত্র আমি একবারই এটি সম্পর্কে চিন্তা করি। আমি সাধারণত কোডটি দেখব এবং বলব "এটি এন + 1 ক্যোরিয়াস করছে, আপনার এটি পরিবর্তন করে কেবল 1 বা 2 করতে হবে"

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

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


1
আমি আসলে এই নৈমিত্তিক "এন + 1" ক্যোয়ারী জিনিসটি এক ধরণের বিপজ্জনক বলে মনে করি। বিশেষত, আমি এমন কোড দেখেছি যা এন ^ d কোয়েরি তৈরি করেছে (যেখানে ডি> = 2) "এন + 1" হিসাবে খারিজ করা হয়েছে, যা সত্যই ভয়াবহ পরিস্থিতিটিকে কেবল খারাপ দেখায়।
ফিলোসোডাড

3

তিনটি প্রশ্ন আপনি রেখেছেন এবং আমি মনে করি সংক্ষিপ্ত-ফর্ম উত্তরগুলি এখনও পর্যন্ত প্রদত্ত দীর্ঘতর যুক্তিগুলিকে সহায়তা করতে পারে।

শিল্পে উন্নয়নের সাথে এই পরীক্ষাটি কতটা প্রাসঙ্গিক?

শিল্পের উপর নির্ভর করে।

কোড স্পিড বা কোড স্পেস যে কোনও জায়গায়, এটি জড়িত শিল্পের সাথে পুরোপুরি প্রাসঙ্গিক। একটি রুটিন কত সময় নিবে, বা কত স্মৃতি (অন / অফলাইন) প্রয়োজন হবে তা আপনাকে প্রায়শই জানতে হবে।

আপনি এটি প্রায়শই কীভাবে ব্যবহার করেন?

শিল্পের উপর নির্ভর করে।

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

সমস্যার জন্য সম্মানিত মানসিকতা থাকা কতটা জরুরি?

সম্পূর্ণ প্রয়োজন।

আপনার এটি প্রতিদিন ব্যবহার করতে হতে পারে, বা কেবলমাত্র মারাত্মক পরিস্থিতিতে; তবে কখনও কখনও এটি প্রয়োজন হবে। মারাত্মকভাবে একটি দম বন্ধ সিস্টেমকে প্রোফাইল করার চেয়ে কোনও সমস্যা আসার আগে ডিজাইনের সময়।


3

আমি বলি এটা খুব ঘন ঘন। আমরা সাধারণত প্রমাণ করি না যে কোনও কিছুর একটি নির্দিষ্ট বিগ-ও রয়েছে, তবে আমরা ধারণাটি অভ্যন্তরীণ করেছি, এবং নির্দিষ্ট ডেটা স্ট্রাকচার এবং অ্যালগরিদমের জন্য বিগ-ও গ্যারান্টিগুলির সাথে পরিচিত হয়েছি / পরিচিত হয়েছি এবং নির্দিষ্ট ব্যবহারের জন্য আমরা দ্রুততম বাছাই করি। এটি জাভা সংগ্রহ লাইব্রেরি বা সি ++ এসটিএলের মতো সমস্ত অপশন দ্বারা পূর্ণ একটি লাইব্রেরি রাখতে সহায়তা করে। আপনি পরোক্ষভাবে এবং স্বাভাবিকভাবেই ব্যবহার বড় হে প্রতিদিন যখন আপনি একটি ব্যবহার করার জন্য চয়ন java.util.HashMap( O(1)একটি পরিবর্তে লুকআপ) java.util.TreeMap( O(lg n)লুকআপ) এবং অবশ্যই একটি জুড়ে একটি রৈখিক অনুসন্ধান চালানোর জন্য না নির্বাচন java.util.LinkedList( O(n)কিছু যেখানে আপনি সাজানো অ্যাক্সেস প্রয়োজন না লুকআপ)।

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


3

হ্যাঁ

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

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


1

এটি সম্ভবত এমন জায়গাগুলিতে ব্যবহার করা হয় যেখানে তারা ব্যবহারের জন্য এপিআই তৈরি করছে। সি ++ এসটিএল এমন কয়েকটি কয়েকটি API এর মধ্যে একটি যা এর অ্যালগরিদমে জটিলতা বিধিনিষেধ আরোপ করে। তবে প্রতিদিনের কর্মক্ষম প্রোগ্রামার / সিনিয়র প্রোগ্রামার / ডিজাইনার / আর্কিটেক্টের জন্য এটি তাদের মনকে খুব বেশি অতিক্রম করে না।


যে কোনও ভাল সংগ্রহের এপিআই এই গ্যারান্টি দেয়, উদাহরণস্বরূপ জাভা সংগ্রহগুলি এপিআই এর ডকুমেন্টেশনেও এই গ্যারান্টি রয়েছে।
কেন ব্লুম

1

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

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

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

এমনকি প্রান্তিক অ্যালগোরিদম লিনিয়ার-টাইম অ্যালগরিদমকে ছাড়িয়ে যায় যদি প্রাক্তন মেমরিটি আরও অনুকূল প্যাটার্নে অ্যাক্সেস করে, যেমন, বা মাল্টিথ্রেডিং এবং / অথবা সিমডির জন্য আরও উপযুক্ত suited কখনও কখনও এমনকি লিনিয়ার অ্যালগোরিদম এই কারণে লোগারিদমিক অ্যালগরিদমকে ছাড়িয়ে যেতে পারে এবং স্বাভাবিকভাবেই রৈখিক সময়ের অ্যালগোরিদম কিশোরী ইনপুটগুলির জন্য লোগারিদমিকগুলিকে ছাড়িয়ে যায়।

সুতরাং আমার কাছে যা গুরুত্বপূর্ণ তা হ'ল কিছু লোকেরা "মাইক্রো-অপ্টিমাইজেশন" বলতে পারেন, যেমন ডেটা উপস্থাপনা (মেমরি লেআউট, গরম / ঠান্ডা ক্ষেত্র বিভাজন সহ অ্যাক্সেস প্যাটার্ন ইত্যাদি), মাল্টিথ্রেডিং, সিমডি এবং মাঝে মাঝে জিপিজিপিউ। যে ক্ষেত্রটিতে প্রত্যেকে নতুন কাগজগুলি সর্বদা প্রকাশিত হওয়ার সাথে সাথে প্রতিটি কিছুর জন্য কাটিং-এজ অ্যালগোরিদমগুলিতে শালীন ব্যবহারের জন্য যথেষ্ট সক্ষম, সেখানে অ্যালগরিদমিক উইজার্ডগুলিকে মারতে আপনার প্রতিযোগিতামূলক প্রান্তটি এত বেশি প্রত্যক্ষভাবে এলগোরিদমিক জটিলতায় উন্নতি করতে আসেনি come গণনার দক্ষতা।

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

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

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


0

হ্যাঁ, শিল্পে জটিলতা গুরুত্বপূর্ণ। যদি আপনি এমন কোনও নকশা শেষ করেন যেখানে একটি সমালোচনামূলক পথটি এন-স্কোয়ার হিসাবে স্কেল করে (কোনও কিছুর সংখ্যা দ্বিগুণ করে ব্যবস্থাকে লোড হিসাবে চারগুণ করে তোলে), আপনি এন স্ক্রিনের তুলনায় আপনার স্কেলিং বাধাটি খুব দ্রুত আঘাত হানবেন if

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


0

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


-3

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

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

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

সুতরাং "বিগ ও" সম্পর্কিত প্রশ্নগুলি সাক্ষাত্কার প্রক্রিয়ার সাথে খুব প্রাসঙ্গিক হতে পারে।

কম্পিউটার প্রোগ্রামার হিসাবে আমার দীর্ঘ সময় ধরে কমপক্ষে প্রতি বছর আমাকে এমন কোড ঠিক করতে হয়েছিল যা ব্যবহারের জন্য সঠিক ডাটা স্ট্রাকচার এবং অ্যালগরিদম না বুঝার কারণে ধীর হয়েছিল তবে আপনি বিগ ও-র বিশদ না বুঝে এই সমস্যাগুলি সমাধান করতে পারেন Big তবে বিগ হে তাঁবুটি বোঝে এমন লোকেরা প্রথমে এই সমস্যাগুলি এড়ায় না।

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