কোন ধরণের ডেটা স্ট্রাকচারকে অবিচ্ছিন্ন করা যেতে পারে?


19

অবিরাম ডেটা স্ট্রাকচার হ'ল অপরিবর্তনীয় ডেটা স্ট্রাকচার। তাদের উপর অপারেশনগুলি ডেটা স্ট্রাকচারের একটি নতুন "অনুলিপি" ফিরিয়ে দেয়, তবে অপারেশন দ্বারা পরিবর্তিত হয়; পুরানো ডেটা স্ট্রাকচার যদিও অপরিবর্তিত রয়েছে। দক্ষতা সাধারণত অন্তর্নিহিত কিছু ডেটা ভাগ করে নেওয়া এবং ডেটা কাঠামোর সম্পূর্ণ অনুলিপি এড়ানো দ্বারা সম্পাদিত হয়।

প্রশ্নাবলী:

  • এমন কি ক্লাসের ডেটা স্ট্রাকচারের ফলাফল রয়েছে যা অবিরাম হতে পারে (একই বা খুব একই রকম জটিলতা রাখার সময়)?

  • পারি সব ডাটা স্ট্রাকচার ক্রমাগত (একই বা অনুরূপ জটিলতার পালন করার সময়) তৈরি করা?

  • কোনও ডেটা স্ট্রাকচার কি অবিচ্ছিন্ন করা যায় না বলে পরিচিত (একই বা খুব একই রকম জটিলতা রাখার সময়)?


1
আপনি কোনও এলোমেলো উপাদান অ্যাক্সেসের জন্য সংরক্ষিত হে (1) জটিলতায় ভেক্টরকে অবিচ্ছিন্ন করতে পারবেন না।
স্মোসন


2
আপনি কি এটি প্রমাণ করতে পারেন?
রিয়েলজ স্লাও

1
আপনার প্রথম প্রশ্নটি খুব বিস্তৃত প্রশ্ন। ডেটা স্ট্রাকচারের বিষয়টিতে অনেকগুলি ফলাফল রয়েছে যা অবিচল করে দেওয়া যায়। কেউ এই বিষয়ে একটি সম্পূর্ণ বই লিখতে পারেন, এবং কিছু লোকের কাছে উদাহরণস্বরূপ, ওকাসাকির বইটি এই বিষয়টির উপর একটি সর্বোত্তম। আপনি কি এই বিষয়ে কিছু গবেষণা করেছেন? আপনি প্রশ্ন সঙ্কুচিত করতে পারেন? যেহেতু এটি দাঁড়িয়েছে, আমার সন্দেহ হয় যে এটি এই সাইটের জন্য উপযুক্ত উপযুক্ত হতে পারে না broad 3 য় প্রশ্নটি আলাদা প্রশ্নে বিভক্ত হতে পারে?
DW

@ রিলেজ স্লাও: আমি এটি আনুষ্ঠানিকভাবে প্রমাণ করতে পারি না, তবে আমি মনে করি এটি সাধারণ জ্ঞান। O (1) ভেক্টরগুলির উপাদানগুলিতে অ্যাক্সেস (হ্যাশ টেবিলগুলি সহ) কোনও নির্দিষ্ট হার্ডওয়্যারে ঠিকানা ডিকোডিংয়ের জন্য নির্দিষ্ট সময়ের উপর নির্ভর করে। দৃistence়তা ভেক্টর সূচক ছাড়াও এক বা দুটি মাত্রা যুক্ত করে। তবে হার্ডওয়্যার অ্যাড্রেসগুলি এখনও একটি মাত্রিক।
স্মোসন

উত্তর:


22

ইতিবাচক ফলাফল: অধ্যবসায় খুব বেশি খরচ হয় না। যে কোনও ডেটা কাঠামো সর্বাধিক একটি সাথে সম্পূর্ণ অবিচ্ছিন্নভাবে তৈরি করা যায় তা দেখাতে পারে ।O(lgn)

প্রুফ: আপনি একটি অ্যারে নিয়ে স্ট্যান্ডার্ড ডেটা স্ট্রাকচার ব্যবহার করে অবিরাম করতে পারেন (উদাহরণস্বরূপ, ভারসাম্যযুক্ত বাইনারি ট্রি; কিছুটা বিশদে বিশদটির জন্য এই উত্তরের শেষে দেখুন)। এটি একটি ধীরগতির সাথে জড়িত : প্রতিটি অ্যারে অ্যাক্সেস অ-অবিচ্ছিন্ন অ্যারের জন্য সময়ের পরিবর্তে ধ্রুবক ডেটা কাঠামোর সাথে সময় নেয় । এখন যে কোনও অপরিহার্য অ্যালগরিদম নিন যার র‌্যাম মডেলের চলমান সময় হ'ল , যেখানে ব্যবহৃত মেমরির পরিমাণ বোঝায়। সমস্ত বড় মেমরিকে একটি বড় অ্যারে ( উপাদান সহ) হিসাবে উপস্থাপন করুন এবং অবিচ্ছিন্ন মানচিত্র ব্যবহার করে এটি অবিচ্ছিন্ন করুন। অপরিহার্য অ্যালগরিদমের প্রতিটি পদক্ষেপ সর্বাধিক ধীর গতিতে অন্তর্ভুক্ত থাকে, সুতরাং মোট চলমান সময়( এলজি এন ) ( 1 ) ( ( এন ) ) এন এন ( এলজি এন ) ( ( এন ) ল জি এন )O(lgn)O(lgn)O(1)O(f(n))nnO(lgn)O(f(n)lgn)

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


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

বিশেষত, উপাদানগুলির একটি অ্যারে বিবেচনা করুন । অধ্যবসায় ছাড়াই, প্রতিটি অ্যারে অ্যাক্সেসে সময় লাগে র‌্যাম মডেলটিতে)। অধ্যবসায় সহ, এটি স্পষ্টতই দেখানো হয়েছে যে একটি এলোমেলো উপাদান অ্যাক্সেসের জন্য সবচেয়ে খারাপ ক্ষেত্রে জটিলতার সাথে ধ্রুবক অ্যারে তৈরি করার কোনও উপায় নেই । বিশেষত, আপাতদৃষ্টিতে একটি নিম্ন সীমানা দেখানো হচ্ছে যে সম্পূর্ণরূপে অবিচলিত অ্যারেগুলিতে অ্যাক্সেস সময় থাকতে হবে। এই নিম্ন সীমাটি নিম্নোক্ত কাগজের p.3 এ জোর দেওয়া হয়েছে:( 1 ) ( 1 ) Ω ( এলজি এলজি এন )nO(1)O(1)Ω(lglgn)

নীচের গণ্ডিটি মিহাই পাত্রাস্কুর জন্য দায়ী, তবে এমন উত্সটির কোনও প্রশংসা নেই যা এই চাপ দেওয়া নিম্ন সীমানার প্রমাণের বিশদ দেয়।


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

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


কীভাবে অবিরাম অ্যারে করা যায়। সবচেয়ে খারাপ ক্ষেত্রে অ্যাক্সেসের সময় দিয়ে কীভাবে সম্পূর্ণ ধ্রুবক অ্যারে তৈরি করা যায় তার জন্য আমি নির্মাণের বর্ণনা দেওয়ার চেষ্টা করব না । তবে, প্রাথমিক ধারণাগুলি খুব জটিল নয়, তাই আমি ধারণাগুলির সংক্ষিপ্তসারটি করব।O(lgn)

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

যদি আমাদের ভারসাম্যযুক্ত বাইনারি গাছের নোড থাকে তবে সমস্ত পাতাগুলির গভীরতা , সুতরাং বাইনারি গাছে এই অপারেশনটি সময় নেয়। এখানে কিছু বিশদ রয়েছে যা আমি এড়িয়ে যাচ্ছি - সবচেয়ে খারাপ সময় অর্জনের জন্য, গাছটি ভারসাম্য বজায় রাখার জন্য আমাদের পুনরায় ভারসাম্য বজায় রাখতে হবে - তবে এটি এর সূচনা দেয়।( এলজি এন ) ( এলজি এন ) ( এলজি এন )nO(lgn)O(lgn)O(lgn)

নীচের সংস্থানগুলিতে আপনি সুন্দর ছবি সহ আরও ব্যাখ্যা পেতে পারেন:

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


আমি প্রথম অনুচ্ছেদটি সত্যই বুঝতে পারছি না, আমি কীভাবে একটি লাল-কালো গাছ ব্যবহার করে ক্রমান্বয়ে অ্যারে তৈরি করব?
জি। বাচ

@ G.Bach সেখানে বিভাগে "বাইনারি অনুসন্ধান গাছ" এবং "র্যান্ডম অ্যাক্সেস স্ট্রাকচার" (বিশেষত গাছ পদ্ধতি) এ লেবেলযুক্ত একটি প্রশংসনীয় ভাল ব্যাখ্যা toves.org/books/persist/index.html । অন্য একটি সুন্দর বিবরণের জন্য, নেটকোড.রু / ডটনেট /?artID=6592# বাইনারিটিস এবং তারপরের কয়েকটি বিভাগ দেখুন। এটি আপনাকে মূল ধারণা দেবে। বিশদগুলি এই প্রশ্নের সুযোগের বাইরে নয়, তবে এটি সমস্ত স্ট্যান্ডার্ড স্টাফ; এই জাতীয় ডেটা স্ট্রাকচার কীভাবে তৈরি করা যায় সে সম্পর্কে আরও তথ্য চাইলে আমি আপনাকে একটি পৃথক প্রশ্ন জিজ্ঞাসা করতে উত্সাহিত করি।
DW

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