অ্যারে প্রারম্ভিককরণের উপর সংরক্ষণ করা


19

আমি সম্প্রতি পড়েছি যে অ্যারেগুলি করা সম্ভব যা প্রাথমিককরণের দরকার নেই, অর্থাত্ প্রতিটি সদস্যকে ডিফল্ট মান হিসাবে সেট করার চেষ্টা করে ব্যয় না করে এগুলি ব্যবহার করা সম্ভব। অর্থাৎ আপনি অ্যারের ব্যবহার শুরু করতে পারেন যেন এটি আরম্ভ না করেই ডিফল্ট মান দ্বারা শুরু করা হয়েছে। (দুঃখিত, আমি এটি কোথায় পড়েছি তা মনে নেই)।

উদাহরণস্বরূপ কেন এটি অবাক হতে পারে:

বলুন যে আপনি পরিসীমা মধ্যে পরিসংখ্যানগুলির সবচেয়ে খারাপ কেস হ্যাশটেবল (সন্নিবেশ / মোছা / সন্ধানের প্রত্যেকের জন্য মডেল করার চেষ্টা করছেন ।[ , এন ]O(1)[1,n2]

আপনি আকার বিটের একটি অ্যারে বরাদ্দ করতে পারবেন এবং হ্যাশটবেলে কোনও পূর্ণসংখ্যার অস্তিত্ব উপস্থাপন করতে স্বতন্ত্র বিটগুলি ব্যবহার করতে পারেন। দ্রষ্টব্য: বরাদ্দ সময় হিসাবে বিবেচনা করা হয়। ( 1 )n2O(1)

এখন, আপনাকে যদি এই অ্যারেটি একেবারে আরম্ভ করতে না হয়, তবে এই হ্যাশট্যাবলে ক্রিয়াকলাপের যে কোনও ক্রম এখন খারাপ পরিস্থিতি worst । ( এন )nO(n)

সুতরাং প্রভাব, আপনি একটি "নিখুঁত" হ্যাশ প্রয়োগ, যা একটি ক্রম জন্য অপারেশন ব্যবহারসমূহ স্থান, কিন্তু রান সময়!Θ ( n 2 ) ( এন )nΘ(n2)O(n)

সাধারণত কেউ আপনার রানটাইমটি আপনার স্থান ব্যবহারের চেয়ে কমপক্ষে খারাপ হিসাবে প্রত্যাশা করে!

দ্রষ্টব্য: উপরের উদাহরণটি একটি স্পারস সেট বা স্পার্স ম্যাট্রিক্স প্রয়োগের জন্য ব্যবহৃত হতে পারে, সুতরাং এটি কেবল তাত্ত্বিক আগ্রহই নয়, আমি মনে করি।

সুতরাং প্রশ্নটি হ'ল:

ডেটা-স্ট্রাকচারের মতো অ্যারে থাকা কীভাবে সম্ভব যা আমাদের সূচনা পদক্ষেপ এড়াতে দেয়?


@ আর্যভট্ট আপনি উল্লেখ করেছেন রেফারেন্স কি?
uli

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

1
আমি মনে করি প্রথম অনুচ্ছেদটি বেশ স্পষ্ট: একটি ডিফল্ট মান রয়েছে, ডিফল্ট মান দিয়ে অ্যারে পূরণ করতে আসলে সময় না নিয়েই। উত্তর, অন্য ক্ষেত্রে কেউ, এটা লিখুন আপ করার আগে আমি কি সময় আছে এখানে scholar.google.co.uk/... এছাড়া আমার ব্লগে একটি খুব সংক্ষিপ্ত ব্যাখ্যা এর rgrig.blogspot.co.uk/2008/12/array -p পাজল-সমাধান
html

@ :ুলি: এটি মূল সমাধানের প্রশ্ন, আমি আসলে এটি অনেক দিন আগে পড়েছি ।
আর্যভাত

@ রাফেল: আপনি যখন প্রথমবারের মতো এই বিষয়ে শুনলেন তখন অবাক করা অবাক লাগে। প্যারাডক্সের বেশিরভাগটি :-) নয়
আর্যভাত

উত্তর:


15

এটি একটি খুব সাধারণ কৌশল, যা হ্যাশিং ব্যতীত অন্য উদ্দেশ্যে ব্যবহৃত হতে পারে। নীচে আমি একটি বাস্তবায়ন দেব (সিউডো কোডে)।

তিনটি অবিচ্ছিন্ন ভেক্টর , এবং আকারের প্রতিটি । আমরা আমাদের ডেটা কাঠামোর অনুরোধ করা অপারেশনগুলি করতে এটি ব্যবহার করব। আমরা একটি পরিবর্তনশীল বজায় । অপারেশনগুলি নিম্নলিখিত হিসাবে প্রয়োগ করা হয়:পি ভি এন পি এসAPVnpos

init:
  pos <- 0

set(i,x):
if not(V[i] < pos and P[V[i]] = i) 
  V[i] <- pos, P[pos] <- i, pos <- pos + 1
A[i] <- x

get(i):
if (V[i] < pos and P[V[i]] = i) 
  return A[i] 
else 
  return empty 

অ্যারে কেবল পদ্ধতিতে পাস করা মানগুলি সংরক্ষণ করে । অ্যারে এবং শংসাপত্রগুলি আছে যা যদি একটি প্রদত্ত অবস্থান বলতে পারেন হিসেবে কাজ সক্রিয়া করা হয়েছে।এস টি ভি পি AsetVPA

লক্ষ্য করুন প্রতি মুহূর্তে উপাদান ছোটো থেকে থেকে সক্রিয়া করা হয়। সুতরাং আমরা নিরাপদে মধ্যে সক্রিয়া মান জন্য একটি শংসাপত্রের যেমন এই মান ব্যবহার করতে পারেন । প্রত্যেক পদের জন্য এ যে সক্রিয়া করা হয়, সেখানে ভেক্টর একটি সংশ্লিষ্ট উপাদান যার মানকে সমান । এটি দ্বারা নির্দেশিত । সুতরাং, আমরা যদি সংশ্লিষ্ট উপাদানটি দেখি, এবং এর মান হ'ল , আমরা জানি যে আরম্ভ করা হয়েছে ( থেকে0 পি এস - 1 আই পি আই ভি [ i ] পি [ ভি [ আই ] ] আই [ আই ] পি [ আই ] ভি [ আমি ] পিP0pos1AiAPiV[i]P[V[i]]iA[i]Pকখনই মিথ্যা বলা হবে না, কারণ আমরা যে সমস্ত উপাদানগুলি বিবেচনা করছি তা সূচনা করা হয়েছে)। একইভাবে, যদি আরম্ভ করা না হয়, তবে এর মধ্যে 0 বাইরে অবস্থানের দিকে নির্দেশ করতে পারে , যখন আমরা নিশ্চিতভাবে জানি যে এটি আরম্ভ করা হয়নি, বা কোনও অবস্থানের দিকে নির্দেশ করতে পারে যে সীমা মধ্যে। কিন্তু এই বিশেষ একটি ভিন্ন অবস্থান থেকে অনুরূপ , সেইজন্য এবং , তাই আমরা জানি যে সক্রিয়া করা হয় নি।A[i]V[i]Pপি [ জে ] পি [ জে ] আই [ আই ]0..pos1P[j]AP[j]iA[i]

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


তবে এটি কি সম্ভব নয় যে যথাক্রমে কখনও সেট করা না হয়ে সমান ? আমি [ আই ]P[V[i]]iA[i]
রবার্ট এস বার্নেস

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

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