বিরতি / রিটার্ন বনাম সহ স্পেসিচ-লুপ, যখন স্পষ্টত ইনগ্রেন্ট এবং পোস্ট-শর্ত সহ লুপ


17

এই সবচেয়ে জনপ্রিয় উপায় পরীক্ষণ একটি মান একটি অ্যারের মধ্যে হল (এটা আমার মনে হচ্ছে):

for (int x : array)
{
    if (x == value)
        return true;
}
return false;        

তবে, যে বইটি আমি বহু বছর আগে পড়েছি, সম্ভবত, রাইথ বা ডিজকস্ট্রায় পড়েছিল, বলা হয়েছিল যে এই স্টাইলটি আরও ভাল (ভিতরে বাইরে বেরোনোর ​​সাথে কিছুক্ষণের সাথে তুলনা করলে):

int i = 0;
while (i < array.length && array[i] != value)
    i++;
return i < array.length;

এইভাবে অতিরিক্ত প্রস্থান শর্তটি লুপ আক্রমণকারীটির স্পষ্ট অংশে পরিণত হয়, লুপের ভিতরে কোনও লুকানো শর্ত থাকে না এবং প্রস্থান হয় না, সবকিছু কাঠামোগত-প্রোগ্রামিং পদ্ধতিতে আরও সুস্পষ্ট এবং আরও বেশি। আমি সাধারণত এই আধুনিক প্যাটার্ন যখনই সম্ভব অগ্রাধিকার এবং ব্যবহৃত forথেকে মাত্র পুনরুক্তি করতে -loop aকরতে b

এবং তবুও আমি বলতে পারি না যে প্রথম সংস্করণটি কম স্পষ্ট। সম্ভবত এটি আরও পরিষ্কার এবং বোঝা সহজ, কমপক্ষে খুব প্রাথমিকভাবে। সুতরাং আমি এখনও নিজেকে জিজ্ঞাসা করছি কোনটি ভাল?

হতে পারে যে কোনও একটি পদ্ধতির পক্ষে একটি ভাল যুক্তি দিতে পারেন?

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

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


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


1
আমি সেগুলি উদাহরণ জানি, তবে এমন ভাষা আছে যা ব্যবহারের ক্ষেত্রে হ্যান্ডেল করার জন্য এপিআই রয়েছে। অর্থcollection.contains(foo)
বেরিন লরিটস

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

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

উত্তর:


19

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

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

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


56

এটা সহজ.

প্রায় কিছুই পাঠকের স্পষ্টতা ব্যতীত গুরুত্বপূর্ণ। আমি প্রথম বৈকল্পিকটি অবিশ্বাস্যভাবে সহজ এবং পরিষ্কার পেয়েছি।

দ্বিতীয় 'উন্নত' সংস্করণ, আমাকে বেশ কয়েকবার পড়তে হয়েছিল এবং নিশ্চিত করতে হয়েছিল যে সমস্ত প্রান্তের অবস্থা ঠিক ছিল।

জিরো ডাব্ট রয়েছে যা কোডিং শৈলীর চেয়ে ভাল (প্রথমটি আরও ভাল।

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

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

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


4
নতুনটি আপেক্ষিক, কারণ এটি ইতিমধ্যে ২০১১ এর স্ট্যান্ডার্ডে ছিল। এছাড়াও, দ্বিতীয় ডেমোটি অবশ্যই স্পষ্টত সি ++ নয়।
হস্তান্তরকারী

একটি বিকল্প সমাধান আপনি যদি একটি একক প্রস্থান বিন্দু ব্যবহার করতে চান longerLength = trueতবে একটি পতাকা সেট করা হবে return longerLength
কুলুব

@ ডেডুপ্লিকেটর দ্বিতীয় ডেমো সি ++ কেন নয়? আমি দেখতে পাচ্ছি না বা কেন আমি স্পষ্ট কিছু মিস করছি?
Rakete1111

2
@ Rakete1111 কাঁচা অ্যারেগুলির মতো কোনও বৈশিষ্ট্য নেই length। যদি এটি প্রকৃতপক্ষে অ্যারে হিসাবে ঘোষণা করা হয় এবং পয়েন্টার হিসাবে না হয় তবে তারা ব্যবহার করতে পারে sizeof, বা এটি যদি হয় std::arrayতবে সঠিক সদস্য ফাংশনটি থাকে size(), lengthসম্পত্তি নেই।
ইলিউসিভ ব্রায়ান

@ ইলিউসিভ ব্রায়ান: sizeofবাইটে থাকবে ... সি ++ 17 হওয়ায় সবচেয়ে জেনেরিক std::size()
হস্তান্তরকারী

9
int i = 0;
while (i < array.length && array[i] != value)
    i++;
return i < array.length;

[…] কাঠামোগত-প্রোগ্রামিং পদ্ধতিতে সবকিছু আরও সুস্পষ্ট এবং আরও বেশি

বেশ না। পরিবর্তনশীল iসময় এখানে লুপ বাইরে বিদ্যমান এবং যখন (শ্লেষ উদ্দেশ্যে) এইভাবে, বাইরের সুযোগ অংশ xএর for-loop শুধুমাত্র লুপ সুযোগ মধ্যে বিদ্যমান। প্রোগ্রামিংয়ের কাঠামো প্রবর্তনের জন্য স্কোপ একটি অত্যন্ত গুরুত্বপূর্ণ উপায়।


1
দয়া করে দেখুন en.wikipedia.org/wiki/Structured_programming
ruakh

1
@ruakh আমি নিশ্চিত না যে আপনার মন্তব্য থেকে কী সরিয়ে নেবেন। এটি কিছুটা প্যাসিভ-আক্রমনাত্মক হিসাবে আসে, যেন আমার উত্তরটি উইকির পৃষ্ঠায় যা লেখা আছে তার বিরোধিতা করে। সম্প্রসারিত করুন.
নাল

"স্ট্রাকচার্ড প্রোগ্রামিং" একটি নির্দিষ্ট অর্থ সহ শিল্পের একটি শব্দ, এবং ওপি উদ্দেশ্যগতভাবে সংশোধন করে যে সংস্করণ # 2 স্ট্রাকচার্ড প্রোগ্রামিংয়ের নিয়মগুলির সাথে সঙ্গতিপূর্ণ হয় যখন সংস্করণ # 1 হয় না। আপনার উত্তর থেকে, দেখে মনে হয়েছিল যে আপনি শিল্পের শব্দটির সাথে পরিচিত নন এবং শব্দটির আক্ষরিক অর্থে ব্যাখ্যা করছেন। আমার মন্তব্য কেন নিষ্ক্রিয়-আক্রমণাত্মক হিসাবে আসে তা আমি নিশ্চিত নই; আমি এটিকে কেবল তথ্যবহুল হিসাবে বুঝিয়েছি।
রুখ

@রুখ আমি এই সংস্করণ # 2 এর সাথে দ্বিমত পোষণ করছি যে নিয়মটি প্রতিটি ক্ষেত্রেই নিয়মকে আরও মেনে চলে এবং আমার উত্তরে সেটিকে ব্যাখ্যা করে।
নাল

আপনি বলছেন "আমি একমত নই" যেন এটি একটি বিষয়গত জিনিস, তবে তা নয়। একটি লুপের ভিতরে থেকে ফিরে আসা কাঠামোগত প্রোগ্রামিংয়ের নিয়মের লঙ্ঘন। আমি নিশ্চিত যে অনেক কাঠামোগত-প্রোগ্রামিং উত্সাহী ন্যূনতম-স্কোপযুক্ত ভেরিয়েবলের ভক্ত, তবে আপনি যদি কাঠামোগত প্রোগ্রামিং থেকে বেরিয়ে কোনও ভেরিয়েবলের সুযোগ হ্রাস করেন তবে আপনি কাঠামোগত প্রোগ্রামিং, পিরিয়ড থেকে বিদায় নিয়েছেন এবং ভেরিয়েবলের ক্ষেত্র হ্রাস করা পূর্বাবস্থায় ফিরে আসে না doesn't যে।
রুখ 18

2

দুটি লুপের বিভিন্ন শব্দার্থক শব্দ রয়েছে:

  • প্রথম লুপটি কেবল একটি সহজ হ্যাঁ / কোনও প্রশ্নের উত্তর দেয় না: "অ্যারেটিতে আমি যে জিনিসটি খুঁজছি তা কি ধারণ করে?" এটি খুব সংক্ষিপ্ত পদ্ধতিতে এটি সম্ভব।

  • দ্বিতীয় লুপটি প্রশ্নের উত্তর দেয়: "অ্যারেটিতে আমি যে জিনিসটি খুঁজছি তা যদি থাকে তবে প্রথম ম্যাচের সূচকটি কী?" আবার এটি খুব সংক্ষিপ্ত পদ্ধতিতে এটি সম্ভব।

যেহেতু দ্বিতীয় প্রশ্নের উত্তর প্রথমটির উত্তরের চেয়ে কঠোরভাবে আরও বেশি তথ্য সরবরাহ করে, আপনি দ্বিতীয় প্রশ্নের উত্তর চয়ন করতে পারেন এবং তারপরে প্রথম প্রশ্নের উত্তর পেতে পারেন। লাইনটি return i < array.length;যাইহোক, এটিই করে।

আমি বিশ্বাস করি যে সাধারনত সেই সরঞ্জামটি ব্যবহার করা সবচেয়ে ভাল যা আপনি ইতিমধ্যে বিদ্যমান, আরও নমনীয় সরঞ্জামটিকে পুনরায় ব্যবহার করতে না পারলে উদ্দেশ্যটির সাথে খাপ খায়। অর্থাৎ,

  • লুপের প্রথম বৈকল্পিকটি ব্যবহার করা ভাল।
  • প্রথম ভেরিয়েন্টটি কেবলমাত্র একটি boolভেরিয়েবল সেট করতে পরিবর্তন করা এবং ব্রেকও ঠিক আছে। (দ্বিতীয় returnবিবৃতি এড়ানো , কোনও ফাংশন রিটার্নের পরিবর্তে একটি চলকটিতে উত্তর পাওয়া যায়))
  • ব্যবহার std::findকরা ভাল (কোড পুনরায় ব্যবহার!)।
  • যাইহোক, স্পষ্টভাবে একটি অনুসন্ধান কোডিং এবং তারপরে একটি উত্তর হ্রাস করা boolহয় না।

নেমে যাওয়া লোকেরা কোনও মন্তব্য
দিলে ভাল লাগবে

2

আমি সম্পূর্ণ তৃতীয় বিকল্পটি পরামর্শ দেব:

return array.find(value);

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

লুপের জন্য একটি অ্যারেরকে অন্য অ্যারে রূপান্তর করার তুলনা করুন:

int[] doubledArray = new int[array.length];
for (int i = 0; i < array.length; i++) {
  doubledArray[i] = array[i] * 2;
}

এবং একটি জাভাস্ক্রিপ্ট-শৈলী mapফাংশন ব্যবহার :

array.map((value) => value * 2);

বা একটি অ্যারের যোগফল:

int sum = 0;
for (int i = 0; i < array.length; i++) {
  sum += array[i];
}

বনাম:

array.reduce(
  (sum, nextValue) => sum + nextValue,
  0
);

এটি কী করে তা বুঝতে আপনি কতক্ষণ সময় নিতে পারেন?

int[] newArray = new int[array.length];
int numValuesAdded = 0;

for (int i = 0; i < array.length; i++) {
  if (array[i] >= 0) {
    newArray[numValuesAdded] = array[i];
    numValuesAdded++;
  }
}

বনাম

array.filter((value) => (value >= 0));

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

জাভাস্ক্রিপ্ট , রুবি , সি # , এবং জাভা সহ বেশিরভাগ আধুনিক ভাষাগুলি অ্যারে এবং অনুরূপ সংগ্রহের সাথে এই স্টাইলের ক্রিয়াকলাপের মিথস্ক্রিয়াকে ব্যবহার করে।

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


2
array.findআমাদের তখন কার্যকর করার সর্বোত্তম উপায় নিয়ে আলোচনা করতে হবে, তাই প্রশ্নটি উত্সাহিত করার প্রস্তাব দেওয়া হচ্ছে array.find। আপনি যদি অন্তর্নির্মিত findঅপারেশন সহ হার্ডওয়্যার ব্যবহার না করেন তবে আমাদের সেখানে একটি লুপ লিখতে হবে।
বার্মার

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

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

4
এটি অন্যভাবে বলতে গেলে অ্যারের উপাদান অনুসন্ধান করা কেবল একটি সহজ উদাহরণ যা তিনি বিভিন্ন লুপিং কৌশলগুলি প্রদর্শন করেছিলেন।
বার্মার

-2

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


3
পিএমার, পারফরম্যান্স-ভিত্তিক উভয় লুপগুলি বেশ সমতুল্য - তাদের উভয়ের দুটি তুলনা রয়েছে।
ড্যানিলা পিয়াতভ

1
যদি কেউ সত্যিকারের পারফরম্যান্সের প্রতি যত্নশীল হয় তবে একটি দ্রুত অ্যালগরিদম ব্যবহার করবে। উদাহরণস্বরূপ অ্যারে বাছাই করুন এবং একটি বাইনারি অনুসন্ধান করুন, বা হ্যাশটেবল ব্যবহার করুন।
user949300

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