বাইনারি অনুসন্ধান ট্রি বনাম তালিকা ছেড়ে যান


218

আমি সম্প্রতি স্কিপ তালিকা হিসাবে পরিচিত ডেটা স্ট্রাকচার জুড়ে এসেছি । বাইনারি অনুসন্ধান গাছের সাথে এটির অনুরূপ আচরণ বলে মনে হয়।

আপনি বাইনারি অনুসন্ধানের গাছের উপরে কেন কখনও এড়িয়ে যেতে চান?

উত্তর:


257

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

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


জন হার্পস মন্তব্য থেকে আপডেট

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

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

বিভাগ 8.2 এ তারা বেশ কয়েকটি একই সাথে গাছের বাস্তবায়নগুলির তুলনা করে। আমি তাদের অনুসন্ধানের সংক্ষিপ্তসার করব। 50, 53 এবং 54 পৃষ্ঠায় কিছু তথ্যমূলক গ্রাফ রয়েছে বলে পিডিএফ ডাউনলোড করা এটি মূল্যবান।

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

আপডেট
হ'ল লক-মুক্ত গাছ সম্পর্কিত কাগজ: সিএএস ব্যবহার করে লক-ফ্রি লাল-কালো গাছ
আমি এটিকে গভীরভাবে দেখিনি, তবে পৃষ্ঠতলে এটি দৃ solid় বলে মনে হচ্ছে।


3
একটি অবনমিত স্কিপলিস্টে উল্লেখ করার দরকার নেই, প্রায় 50% নোডের মধ্যে একটি একক লিঙ্ক থাকা উচিত যা সন্নিবেশ করিয়ে দেয় এবং উল্লেখযোগ্যভাবে দক্ষ মুছে দেয়।
অ্যাডিসাক

2
পুনরায় ভারসাম্য বজায় রাখার জন্য কোনও মুটেক্স লক প্রয়োজন হয় না। Cl.cam.ac.uk/research/srg/netos/lock-free
জন

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

4
@ ডিফ্ট_কোড: ইন্টেল সম্প্রতি হ্যাসওয়েলে টিএসএক্সের মাধ্যমে লেনদেনের মেমোরি কার্যকর করার ঘোষণা দিয়েছে । আপনি উল্লেখ করেছেন এমন লক ফ্রি ডেটা স্ট্রাকচার এটি আকর্ষণীয় প্রমাণ করতে পারে।
মাইক বেইলি

2
আমি মনে করি ফিজের উত্তরটি এই উত্তর (২০১২) এর চেয়ে (২০১৫ সাল) বেশি আপ-টু-ডেট and সুতরাং সম্ভবত এখনই পছন্দসই উত্তর হওয়া উচিত।
fnl

81

প্রথমত, আপনি কোনও র্যান্ডমাইজড ডেটা স্ট্রাকচারের সাথে মোটামুটি তুলনা করতে পারবেন না যা আপনাকে সবচেয়ে খারাপ ক্ষেত্রে গ্যারান্টি দেয়।

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

অন্য উপায়ে, আপনার কাছে ডিটারমিনিস্টিক স্কিপ তালিকা থাকতে পারে যা সবচেয়ে খারাপ ক্ষেত্রে পারফরম্যান্সের গ্যারান্টি দেয়, সিএফ। মুনরো ইত্যাদি।

উপরের কিছু দাবিগুলির বিপরীতে, আপনার কাছে বাইনারি অনুসন্ধান ট্রি (বিএসটি) প্রয়োগ করা যেতে পারে যা সমবর্তী প্রোগ্রামিংয়ে ভাল কাজ করে। সমঝোতা-কেন্দ্রিক বিএসটিগুলির একটি সম্ভাব্য সমস্যা হ'ল লাল-কালো (আরবি) গাছ থেকে আপনার ভারসাম্য বজায় রাখার মতো গ্যারান্টি সহজে পাওয়া যায় না। (তবে "স্ট্যান্ডার্ড", অর্থাৎ এলোমেলোভাবে বাদ দেওয়া তালিকাগুলি আপনাকে এই গ্যারান্টি দেয় না)) সর্বদা ভারসাম্য বজায় রাখা এবং ভাল (এবং প্রোগ্রামে সহজ) একযোগে অ্যাক্সেসের মধ্যে একটি বাণিজ্য রয়েছে, তাই শিথিল আরবি গাছগুলি সাধারণত ব্যবহৃত হয় যখন ভাল সম্মতিটি পছন্দ হয়। শিথিলতা এখনই গাছটিকে পুনরায় ভারসাম্য না করার মধ্যে রয়েছে। কিছুটা তারিখের (1998) জরিপের জন্য হ্যাঙ্কের '' সাম্প্রতিক লাল-কালো গাছের অ্যালগোরিদমগুলির পারফরম্যান্স '' [ps.gz] দেখুন

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

128 থ্রেড সহ, আমাদের অ্যালগরিদম জাভা-অ-ব্লকিং স্কিপলিস্টকে 13% থেকে 156% পর্যন্ত ছাপিয়ে গেছে, ব্রোনসন এট আল-এর লক-ভিত্তিক AVL গাছ। %৩% থেকে ২২৪%, এবং একটি আরবিটি যা সফটওয়্যার ট্রানজেকশনাল মেমরি (এসটিএম) 13 থেকে 134 বার ব্যবহার করে

যোগ করার জন্য সম্পাদনা করুন: পুগের লক-ভিত্তিক স্কিপ তালিকা যা ফ্রেজার এবং হ্যারিসের 2007 ( "কনক্যান্ট প্রোগ্রামিং উইন্ডলড লক" তে তাদের নিজস্ব লক-ফ্রি সংস্করণের নিকটবর্তী হওয়ার জন্য চিহ্নিত হয়েছিল) ভাল সমবর্তী ক্রিয়াকলাপের জন্য টুইট করা হয়েছে, সিএফ। পুগের " বাদ দেওয়া তালিকার সমবর্তী রক্ষণাবেক্ষণ" , যদিও এটি একটি হালকা উপায়ে। তবুও একটি নতুন / ২০০৯ পত্রিকা "একটি সাধারণ আশাবাদী এড়িয়ে চলা তালিকা আলগোরিদিম"হেরলিহি এট আল দ্বারা, যা সমকালীন স্কিপ তালিকার একটি লক-ভিত্তিক বাস্তবায়ন বলে মনে করা হয়, পুগের সমালোচনা করেছেন যে তাদের পক্ষে যথেষ্ট বিশ্বাসযোগ্যতার প্রমাণ সরবরাহ করা হয়নি। এটিকে (সম্ভবত অত্যধিক প্যাডেন্টিক) কোয়েম রেখে হেরলিহী এট আল। দেখান যে তাদের ছেড়ে দেওয়া তালিকার সহজ লক-ভিত্তিক বাস্তবায়ন আসলে জেডকে'র লক-মুক্ত বাস্তবায়নের পাশাপাশি স্কেল করতে ব্যর্থ হয়েছে, তবে কেবলমাত্র উচ্চ বিতর্ক (50% সন্নিবেশ, 50% মোছা এবং 0% লুকোচুরি) ... যা ফ্রেজার এবং হ্যারিস মোটেও পরীক্ষা করেনি; ফ্রেজার এবং হ্যারিস কেবলমাত্র 75% লকআপস, 12.5% ​​সন্নিবেশ এবং 12.5% ​​মুছে ফেলা (~ 500K উপাদানগুলির সাথে তালিকায় এড়াতে) পরীক্ষা করে। হারলিহী এট আল এর সহজ বাস্তবায়ন। তারা পরীক্ষামূলকভাবে কম বিতর্ক করার ক্ষেত্রে জেডিকে থেকে লক-মুক্ত সমাধানেরও কাছাকাছি আসে (%০% অনুসন্ধান, ২০% সন্নিবেশ, ১০% মুছে ফেলা); তারা যখন এড়িয়ে যাওয়ার তালিকাকে যথেষ্ট পরিমাণে বড় করে ফেলেছে, অর্থাৎ 200K থেকে 2M উপাদানগুলিতে চলে গেছে তখন তারা প্রকৃতপক্ষে এই দৃশ্যের জন্য লক-মুক্ত সমাধানটিকে মারধর করে, যাতে কোনও লক নিয়ে বিতর্ক হওয়ার সম্ভাবনা নগণ্য হয়ে যায়। হেরলিহি এট আল থাকলে ভাল হত। পগের প্রমাণের জন্য তাদের হ্যাঙ্গআপটি অর্জন করেছে এবং তার বাস্তবায়নও পরীক্ষা করেছে, তবে হায় তারা এগুলি করেনি।

EDIT2: আমি একটি (2015 প্রকাশিত) সব benchmarks এর motherlode পাওয়া যায়নি: Gramoli এর "থেকে বেশি আপনি কি কখনো সম্পর্কে সিংক্রোনাইজ Synchrobench, পরিমাপ সমসাময়িক আলগোরিদিম উপর সিংক্রোনাইজ প্রভাব জানতে চেয়েছিলেন।" : এখানে একটি একটি উদ্ধৃত এই প্রশ্নের প্রাসঙ্গিক ইমেজ আছে।

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

"আলগো ৪." উপরে বর্ণিত ব্রাউন এট আল-এর পূর্বসূরী (পুরানো, ২০১১ সংস্করণ)। (2014 সংস্করণটি কতটা ভাল বা খারাপ তা আমি জানি না)। "আলগো.26" হেরলিহের উপরে বর্ণিত; আপনি দেখতে পাচ্ছেন এটি আপডেটে ট্র্যাশ হয়ে যায় এবং মূল কাগজ থেকে সান সিপিইউয়ের চেয়ে এখানে ব্যবহৃত ইন্টেল সিপিইউতে আরও খারাপ। "Algo.28" হ'ল জেডিকে থেকে সমকালীন স্কিপলিস্টম্যাপ; এটি অন্য সিএএস-ভিত্তিক স্কিপ তালিকার বাস্তবায়নের তুলনায় আশা করে থাকতে পারে না। উচ্চ বিতর্কযুক্ত বিজয়ীরা হ'ল "আলগো ২" ক্রেন এট আল দ্বারা বর্ণিত একটি লক-ভিত্তিক অ্যালগরিদম (!!)। মধ্যে "একটা বাদানুবাদের-বান্ধব বাইনারি অনুসন্ধান বৃক্ষ" এবং "Algo.30" থেকে "আবর্তিত skiplist" হয় "multicores জন্য লগারিদমিক ডাটা স্ট্রাকচার" । "। পরামর্শ দিন যে গ্রামোলি এই তিনটি বিজয়ী-অ্যালগোরিদম কাগজপত্রের সহ-লেখক। "আলগো.27" হ'ল ফ্রেজারের এড়িয়ে যাওয়া তালিকার সি ++ বাস্তবায়ন।

গ্রামোলির উপসংহারটি সিএএস-ভিত্তিক সমান্তরাল গাছ প্রয়োগের সাথে স্ক্রুপ-লিঙ্কের তুলনায় একই জাতীয় স্কিপ তালিকার তুলনায় অনেক সহজ। এবং পরিসংখ্যানগুলির উপর ভিত্তি করে, এটির সাথে একমত হওয়া শক্ত। এই বাস্তবতার জন্য তাঁর ব্যাখ্যা:

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

ব্রাউন এট আল-এর সাম্প্রতিক কাজের জন্য এই অসুবিধাটিকে ওভাররেড করা মূল উদ্বেগ ছিল। তাদের কাছে মাল্টি-রেকর্ড এলএল / এসসি যৌগিক "প্রিমিটিভস" তৈরির বিষয়ে সম্পূর্ণ পৃথক (২০১৩) কাগজ "প্রজমেটিক প্রিমিটিভস অব নন-ব্লকিং ডেটা স্ট্রাকচারস" রয়েছে, যাকে তারা এলএলএক্স / এসসিএক্স বলে, তারা নিজেরাই (মেশিন-স্তর) সিএএস ব্যবহার করে বাস্তবায়ন করেছেন। ব্রাউন এট আল। তাদের 2014 সালে এই এলএলএক্স / এসসিএক্স বিল্ডিং ব্লকটি ব্যবহার করেছে (তবে তাদের ২০১১ সালে নয়) একত্রে গাছ প্রয়োগ হয়েছে।

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

সিঙ্ক্রোবেঞ্চ কোড (পরীক্ষিত সমস্ত অ্যালগোরিদম সহ) এখানে উপলভ্য: https://github.com/gramoli/synchrobench । সর্বশেষ ব্রাউন ব্র্যান্ড এট। বাস্তবায়ন (উপরের মধ্যে অন্তর্ভুক্ত নয়) http://www.cs.toronto.edu/~tabrown/chromat/ConcurrentChromaticTreeMap.java এ কারও কাছে 32+ কোর মেশিন পাওয়া যায়? জে / কে আমার বক্তব্য হ'ল আপনি এগুলি চালাতে পারেন।


12

এছাড়াও, দেওয়া উত্তরগুলি ছাড়াও (ভারসাম্যযুক্ত গাছের সাথে তুলনামূলক পারফরম্যান্সের সাথে বাস্তবায়নের স্বাচ্ছন্দ্য)। আমি দেখতে পেলাম যে অর্ডার ট্র্যাভারসাল বাস্তবায়ন করা (সামনের দিকে এবং পিছনের দিকে) অনেক সহজ কারণ একটি স্কিপ-তালিকা কার্যকরভাবে কার্যকর করার সাথে একটি লিঙ্কযুক্ত তালিকা রয়েছে।


1
বিন গাছের জন্য এত সহজে অর্ডার ট্র্যাভার্সাল নয় যেমন: "ডিফ ফানক (নোড): ফানক (বাম (নোড)); অপ (নোড); ফানক (ডান (নোড))"?
ক্লাদিউ

6
অবশ্যই, যদি আপনি সমস্ত একটি ফাংশন কলে কল করতে চান তবে এটি সত্য। আপনি যদি স্ট্যান্ড :: মানচিত্রে পুনরাবৃত্ত শৈলীর ট্র্যাভারসাল রাখতে চান তবে এটি আরও বিরক্তিকর হয়ে ওঠে।
ইভান তেরান

@ ইভান: কার্যকরী ভাষায় নয় যেখানে আপনি কেবল সিপিএসে লিখতে পারেন।
জন হ্যারোপ

@Evan: def iterate(node): for child in iterate(left(node)): yield child; yield node; for child in iterate(right(node)): yield child;? =)। অ-লোকাল কন্ট্রোল আমেরিকান অ্যাডমাস .. @ জন: সিপিএসে লেখা ব্যথা, তবে আপনি কি ধারাবাহিকতা বোঝাতে চাইছেন? জেনারেটর মূলত অজগরটির ধারাবাহিকতার একটি বিশেষ ক্ষেত্রে।
ক্লাদিউ

1
@ ইভান: হ্যাঁ এটি ততক্ষণ কাজ করে যতক্ষণ না কোনও সংশোধনকালে নোড প্যারামিটারটি গাছ থেকে কেটে ফেলা হয়। সি ++ ট্র্যাভারসালের একই সীমাবদ্ধতা রয়েছে।
deft_code

10

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

আমি যে সুবিধাটি জানি তা হ'ল কিছু চালাক লোক কীভাবে একটি লক-ফ্রি কনট্রেন্ট স্কিপ তালিকা কার্যকর করতে পারে যা কেবলমাত্র পারমাণবিক ক্রিয়াকলাপ ব্যবহার করে। উদাহরণস্বরূপ, জাভা 6 তে কনক্র্যান্টস্কিপলিস্টম্যাপ ক্লাস রয়েছে এবং আপনি যদি উন্মাদ হন তবে আপনি এটিতে উত্স কোডটি পড়তে পারেন।

তবে একসাথে বি-ট্রি বৈকল্পিক লিখতে খুব বেশি কষ্ট হয় না - আমি এটি অন্য কারও দ্বারা দেখেছি - আপনি যদি গাছের উপর দিয়ে হাঁটতে শুরু করেন তবে আপনি যদি প্রিমিটিভলি বিভক্ত হয়ে নোডগুলিকে "কেবলমাত্র" বিভক্ত করেন তবে আপনাকে আর করতে হবে না অচলাবস্থা নিয়ে উদ্বেগ এবং একবারে একবারে গাছের দুটি স্তরে লক রাখা দরকার। সিঙ্ক্রোনাইজেশন ওভারহেড কিছুটা বেশি হবে তবে বি-ট্রি সম্ভবত দ্রুত faster


4
আমার মনে হয় আপনি বাইনারি ট্রিকে বি-ট্রি বলা উচিত নয়, সেই নামটির সাথে একেবারে আলাদা ডিএস রয়েছে
শিহাব শাহরিয়ার খান

8

আপনি উদ্ধৃত উইকিপিডিয়া নিবন্ধ থেকে :

N (এন) ক্রিয়াকলাপ, যা আমাদের প্রতিটি নোডকে আরোহী ক্রমে দেখার জন্য বাধ্য করে (যেমন পুরো তালিকাটি মুদ্রণ করা) একটি সর্বোত্তম উপায়ে স্কিপ-তালিকার স্তর কাঠামোটির পিছনে পর্দার পিছনে ড্রানডমাইজেশন করার সুযোগ সরবরাহ করে, ও (লগ এন) অনুসন্ধানের সময় এড়ানোর তালিকা এনে দেওয়া হচ্ছে। [...] একটি এড়িয়ে যাওয়া তালিকা, যার উপরে আমরা সম্প্রতি [এরকম কোনও] performed (এন) অপারেশন করিনি, আরও traditionalতিহ্যগত ভারসাম্যযুক্ত ট্রি ডেটা স্ট্রাকচারের মতো একই নিরঙ্কুশতম খারাপ-ক্ষেত্রে পারফরম্যান্সের গ্যারান্টি সরবরাহ করে না , কারণ এটি সর্বদা সম্ভব (যদিও খুব কম সম্ভাবনার সাথে) যে স্কিপ তালিকা তৈরি করতে ব্যবহৃত মুদ্রা-ফ্লিপগুলি একটি খারাপভাবে ভারসাম্যপূর্ণ কাঠামো তৈরি করবে

সম্পাদনা করুন: সুতরাং এটি বাণিজ্য-বন্ধ: এড়িয়ে যান তালিকাগুলি ঝুঁকিতে কম স্মৃতি ব্যবহার করে যে তারা ভারসাম্যহীন গাছে ক্ষয় করতে পারে।


এড়িয়ে যাওয়া তালিকা ব্যবহারের বিরুদ্ধে এটি একটি কারণ হবে।
ক্লাদিউ

7
এমএসডিএনকে উদ্ধৃত করে, "[100 স্তর 1 উপাদানের জন্য] সম্ভাবনাগুলি 1,267,650,600,228,229,401,496,703,205,376 এ হুবহু 1" "।
পিটারচেন

8
আপনি কেন বলবেন যে তারা কম স্মৃতি ব্যবহার করে?
জোনাথন

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

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

2

তালিকাগুলি বাদ দিয়ে তালিকাগুলি প্রয়োগ করা হয়।

লক ফ্রি সলিউশন একক এবং দ্বিগুণ সংযুক্ত তালিকার জন্য বিদ্যমান - তবে কোনও লক মুক্ত সমাধান নেই যা কোনও ও (লগন) ডেটা কাঠামোর জন্য সরাসরি সিএএস ব্যবহার করে।

আপনি এড়াতে তালিকা তৈরি করতে CAS ভিত্তিক তালিকা ব্যবহার করতে পারেন।

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

সুতরাং, তারা যেমন অদ্ভুত, তারা খুব দরকারী হিসাবে পরিণত :-)


5
"কোনও লক মুক্ত সমাধান নেই যা কোনও ও (লগন) ডেটা কাঠামোর জন্য সরাসরি সিএএস ব্যবহার করে"। সত্য না. পাল্টা উদাহরণের জন্য দেখুন cl.cam.ac.uk/research/srg/netos/lock-free
জন

-1

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

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

একটি ইনমেমরি বাইনারি অনুসন্ধান স্প্লে ট্রি দুর্দান্ত এবং আরও ঘন ঘন ব্যবহৃত হয়।

অভিধান এ চালান বনাম স্প্লে বৃক্ষ বনাম হ্যাশ টেবিল রানটাইম অপারেটিং সন্ধান করুন


আমি একটি তাত্ক্ষণিকভাবে দেখেছি এবং আপনার ফলাফলগুলি স্প্লিট্রিস্টি স্প্লিট্রি-এর চেয়ে দ্রুত দেখায়।
চিনাসৌর

এড়ানো-তালিকার অংশ হিসাবে এলোমেলোভাবে ধারণা গ্রহণ করা বিভ্রান্তিকর। উপাদানগুলি কীভাবে বাদ যায় তা গুরুত্বপূর্ণ। সম্ভাব্য কাঠামোর জন্য র্যান্ডমাইজেশন যুক্ত করা হয়।
ব্যবহারকারী568109
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.