কোন ডেটা স্ট্রাকচার দক্ষতার সাথে পূর্ণসংখ্যার ব্যাপ্তিগুলি সঞ্চয় করতে পারে?


10

আমাকে 0 থেকে 65535 পরিসরের মধ্যে পূর্ণসংখ্যার উপর একটি সংগ্রহ রাখতে হবে যাতে আমি নিম্নলিখিতগুলি দ্রুত করতে পারি:

  • একটি নতুন পূর্ণসংখ্যা প্রবেশ করান
  • একযোগে পূর্ণসংখ্যার পূর্ণসংখ্যা Inোকান
  • একটি পূর্ণসংখ্যা সরান
  • একটি পূর্ণসংখ্যার নীচে সমস্ত পূর্ণসংখ্যা সরান
  • কোনও পূর্ণসংখ্যা উপস্থিত থাকলে পরীক্ষা করুন

আমার ডেটাতে সম্পত্তি রয়েছে যা এটি প্রায়শই সংগ্রহে সংখ্যক পূর্ণসংখ্যার পূর্ণসংখ্যার সমন্বয় করে। উদাহরণস্বরূপ, সংগ্রহ এক সময় হতে পারে:

{ 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 }

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

এমন কি কোনও বিদ্যমান ডেটা স্ট্রাকচার রয়েছে যা এই সমস্যার জন্য উপযুক্ত হবে?

উত্তর:


9

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

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


5

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

এর বাইরেও, কোনও সমস্যার জন্য একটি নকশা নিয়ে আসার চেষ্টা করার সময় আপনাকে প্রথমে সমস্যাটি খুব ভালভাবে বুঝতে হবে এবং অতিরিক্ত অনেকগুলি প্রশ্ন জিজ্ঞাসা করা উচিত। এই ক্ষেত্রে প্রাসঙ্গিক প্রশ্নগুলি মনে হবে (কোনও নির্দিষ্ট ক্রমে নয়):

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

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

আরও কিছুটা কাজের জন্য, আপনি 8192 পূর্ণসংখ্যায় বিট হিসাবে ডেটা সংরক্ষণ করে গতি ব্যয় করে, যদি উদ্বেগের বিষয় হন তবে আপনি স্পেসে সঞ্চয় করতে পারেন। যদিও ধারণাগতভাবে একক পূর্ণসংখ্যার ক্রিয়াকলাপগুলি এখনও ধ্রুবক সময় এবং পরিসীমা পূর্ণ সংখ্যার ক্রিয়াকলাপগুলি এখনও রৈখিক সময় হতে পারে তবে এগুলি ধীর হবে।

সুতরাং, যদি এটি সত্যিই আপনার সমস্যা হয় তবে আমি বলব একটি অ্যারে ব্যবহার করুন এবং কোডের সাথে আরও গুরুত্বপূর্ণ বিষয়গুলিতে যান।

যদি এটি সত্যিই আপনার সমস্যা না হয়ে থাকে এবং আপনি রিলে করেন নি এমন অন্যান্য বিবেচনা রয়েছে (যেমন সম্ভবত ডোমেনটি সত্যিকার অর্থে নয় এবং আপনি যে সমস্যার বিষয়ে জিজ্ঞাসা করছেন সহজ করার চেষ্টা করছেন) তবে আপনার প্রয়োজন হবে আপনার প্রশ্নটি আবার জিজ্ঞাসা করার জন্য, এবার আমাদের আসল সমস্যাটি জানান।[0,65535]


3

আপনি ভ্যান এমডে বোস ট্রি এর মতো কোনও পূর্ণসংখ্যার ডেটা কাঠামো বিবেচনা করতে পারেন । একটি পূর্ণসংখ্যা একটি নির্দিষ্ট মহাবিশ্ব উপর ডাটা স্ট্রাকচার কাজ । আপনার উল্লিখিত কয়েকটি অপারেশন খুব দক্ষতার সাথে প্রয়োগ করা যেতে পারে। বিশেষত, একটি একক উপাদান সন্নিবেশ করা, মুছে ফেলা এবং অনুরোধ করা । অন্যান্য ক্রিয়াকলাপগুলি (বাল্ক সন্নিবেশ / মোছা) বেশি ব্যয়বহুল হতে পারে, তবে ভ্যান এমডে বোস ট্রিে বিটট্রিকস ব্যবহার করে আপনার সিস্টেমের শব্দের আকার সম্পর্কে একটি গতি বাড়িয়ে নিতে সক্ষম হওয়া উচিত।( লগ লগ ইউ )U={0,,u1}O(loglogu)

আপনার ডেটা কাঠামোর উপর নির্ভর করে আপনার ডেটা কীভাবে সংরক্ষণ করবেন তা অনেক চালাক বিকল্প থাকতে পারে।

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