জাভাস্ক্রিপ্ট ES6 গণনা / সংগ্রহের জটিলতা


89

কেইড সংগ্রহ (সেট, মানচিত্র, উইকসেট এবং উইকম্যাপ) এর ES6 স্পেসিফিকেশন দ্বারা কোন সময়ের জটিলতা (বিগ-ও স্বরলিপিতে) সরবরাহ করা হয়েছে?

আমার প্রত্যাশা, এবং আমি আশা করি, সবচেয়ে ডেভেলপারদের, যে বিবরণ এবং বাস্তবায়নের ব্যবহার করবে ব্যাপকভাবে গৃহীত performant আলগোরিদিম, যে ক্ষেত্রে Set.prototype.has, addএবং deleteসব হে (1) গড় ক্ষেত্রে হও। সমতুল্য Mapএবং Weak–সমতুল্যদের জন্য একই ।

বাস্তবায়নগুলির সময় জটিলতা যেমন বাধ্যতামূলক ছিল তা আমার কাছে সম্পূর্ণরূপে আপাত নয় ECMAScript 2015 ভাষার স্পেসিফিকেশন - 6th ষ্ঠ সংস্করণ - 23.2 সেট অবজেক্টস

যদি না আমি এটি ভুল বুঝেছি (এবং এটি অবশ্যই করা খুব সম্ভব) তবে এটি ইসিএমএর নির্দিষ্ট আদেশগুলি দেখায় যে বাস্তবায়নগুলি (যেমন Set.prototype.has) একটি রৈখিক সময় ( ও (এন) ) অ্যালগরিদম ব্যবহার করে। এটি আমাকে অত্যধিক অবাক করে তুলেছিল যে আরও পারফরম্যান্ট অ্যালগরিদমগুলি স্পেক দ্বারা বাধ্যতামূলক বা এমনকি অনুমতিপ্রাপ্ত হবে না এবং কেন এই ঘটনাটি রয়েছে তার ব্যাখ্যাতে আমি খুব আগ্রহী হব।


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

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

4
"সেট অবজেক্টগুলি হ্যাশ টেবিল বা অন্য যেকোন প্রক্রিয়া ব্যবহার করে প্রয়োগ করা আবশ্যক যা গড় হিসাবে সংগ্রহের উপাদানগুলির সংখ্যার উপর সাবলাইনারযুক্ত অ্যাক্সেসের সময় সরবরাহ করে" "- সেই পৃষ্ঠা থেকে।
জর্জি

উত্তর:


61

ঠিক সেই অনুচ্ছেদ থেকে আপনার লিঙ্ক হয়েছে:

সেট অবজেক্টগুলি অবশ্যই [মেকানিজম] ব্যবহার করে প্রয়োগ করতে হবে যা গড়ে, অ্যাক্সেসের সময় সরবরাহ করে যা সংগ্রহের উপাদানগুলির সংখ্যার উপর সাবলাইনার হয়।

আপনি মানচিত্র , উইকম্যাপস এবং উইকসেটের জন্য একই বাক্যটি পাবেন ।

এটি ইসিএমএ সুনির্দিষ্ট আদেশের মনে হচ্ছে যে বাস্তবায়নগুলি (যেমন সেট.প্রোটোটাইপ.হাস) একটি রৈখিক সময় ( O(n)) অ্যালগরিদম ব্যবহার করবে।

না:

এই Setঅবজেক্টের স্পেসিফিকেশনে ব্যবহৃত ডেটা স্ট্রাকচারগুলি কেবল সেট অবজেক্টের প্রয়োজনীয় পর্যবেক্ষণযোগ্য শব্দার্থবিজ্ঞানের বর্ণনা দেওয়ার জন্য। এটি একটি কার্যকর বাস্তবায়ন মডেল হওয়ার উদ্দেশ্যে নয়।

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


4
যে বাছাই করার জন্য ধন্যবাদ। আমি যখন অনুচ্ছেদে পৌঁছেছি তখন অবশ্যই আমার চোখ ঝলমলে হয়ে গেছে। :) সুতরাং যে আলগোরিদিমগুলি হয় ও (লগ (এন)) বা ও (1) হয়, তবে অন্যথায় বাধ্যতামূলক নয় (প্রদত্ত যে তারা ও (এন) এর অধীনে রয়েছে)?
ব্রায়ান এম হান্ট

4
@ ব্রায়ানএম.হান্ট: সঠিক।
বার্গি

32

কৌতূহলী যে কেউ, আমি খুব দ্রুত একটি মানদণ্ড করেছি:

const benchmarkMap = size => {
  console.time('benchmarkMap');
  var map = new Map();
  for (var i = 0; i < size; i++) map.set(i, i);
  for (var i = 0; i < size; i++) var x = map.get(i);
  console.timeEnd('benchmarkMap');
}

const benchmarkObj = size => {
  console.time('benchmarkObj');
  var obj = {};
  for (var i = 0; i < size; i++) obj[i] = i;
  for (var i = 0; i < size; i++) var x = obj[i];
  console.timeEnd('benchmarkObj');
}

var size = 1000000;

benchmarkMap(size);
benchmarkObj(size);

আমি এটি কয়েকবার চালিয়েছি এবং নিম্নলিখিত ফলাফল পেয়েছি:

(2017 ম্যাকবুক প্রো, 2.5 গিগাহার্টজ আই 7 ডাব্লু / 16 জি র‌্যাম)

benchmarkMap: 189.120ms
benchmarkObj: 44.214ms

benchmarkMap: 200.817ms
benchmarkObj: 38.963ms

benchmarkMap: 187.968ms
benchmarkObj: 41.633ms

benchmarkMap: 186.533ms
benchmarkObj: 35.850ms

benchmarkMap: 187.339ms
benchmarkObj: 44.515ms

4
@ ডোডামব্রোগিয়া যদি আপনি সেটিংসকে আলাদা করে রাখেন তবে আমি পেয়ে যাব: মানচিত্র সেট = 124, মানচিত্র পান = 40, অবজেক্ট সেট = 26, অবজেক্ট
গেইট

@ এজেপি আমি সেই পরিসংখ্যানগুলির সাথে এটি ভেঙে ফেলার কথা ভাবি নি। আপনার ইনপুট জন্য ধন্যবাদ, এটি একটি ভাল অবদান। আমি যখন আমার একটি সেকেন্ড থাকবে তখন আমি আমার উত্তরটিতে এটি যুক্ত করতে পারি কিনা তা আমি দেখতে পাব। ধন্যবাদ!
ডোমডামব্রোগিয়া

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

4
" 2017 ম্যাকবুক প্রো, 2.5 গিগাহার্টজ আই 7 ডাব্লু / 16 জি র‍্যাম " - আহ, এটি দুর্দান্ত এবং সব কিছু, তবে আপনি কোন জাভাস্ক্রিপ্ট ইঞ্জিনটি বেনমার্ক করেছিলেন?
বার্গি

4
আকর্ষণীয়ভাবে যথেষ্ট, deleteঅপারেশন এবং ক্রিয়াকলাপ অন্তর্ভুক্ত করার সময়, Mapআরও ভাল সম্পাদন করে। jsfiddle.net/23hrp0eq
জোর্জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.