হ্যাশ টেবিল অপারেশন ও (1) কোন ধরণের ডেটা জন্য?


18

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

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

সুতরাং, একটি পদক্ষেপ নেওয়া: ডেটা উত্স সম্পর্কে কিছু জ্ঞান দেওয়া হলে, আমি কীভাবে নির্ধারণ করতে পারি যে হ্যাশ টেবিলের অপারেশন করার সম্ভাবনা রয়েছে এবং সম্ভবত আমার হ্যাশ ফাংশনটিতে কোন কৌশলগুলি ব্যবহার করা উচিত?O(1)


ওহ, এবং হ্যাশ টেবিল বনাম বাইনারি গাছ সম্পর্কিত, তবে এখানে আমি হ্যাশ টেবিলগুলিতে ফোকাস করছি এবং যখন তারা সেরা (বা না হয়)।
গিলস 21:56-

যে কোনও হ্যাশ-ফাংশনের সর্বোত্তম ক্ষেত্রে হ'ল ডেটা সমানভাবে বিতরণ করা হয়।
0x0

@ সুনীল: সত্য নয়। আপনার পছন্দসই হ্যাশ ফাংশন থাকতে পারে।
রাফেল

আমি মনে করি এই প্রশ্নটি খুব বিস্তৃত। বিশেষত, আপনি কি ডেটা উত্সগুলি সম্পর্কে জ্ঞানটি দেখতে ভাল লাগবে?
রাফেল

@ রাফেল উদাহরণস্বরূপ, কীগুলি যদি স্ট্রিং হয়: লোকের নাম, ডিরেক্টরিতে ফাইলের নাম, এক্সএমএল ট্যাগগুলি, ফাইল হ্যাশ, ...
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


4

এমন বেশ কয়েকটি কৌশল রয়েছে যে গ্যারান্টি দেয় যে লুকোচুরির জন্য সর্বদা ও (1) ক্রিয়াকলাপ প্রয়োজন, এমনকি সবচেয়ে খারাপ ক্ষেত্রেও।

আমি কীভাবে এটি নির্ধারণ করতে পারি যে হ্যাশ টেবিলটিতে ও (1) অপারেশন করার সম্ভাবনা রয়েছে এবং সম্ভবত আমার হ্যাশ ফাংশনটিতে কোন কৌশলগুলি ব্যবহার করা উচিত?

সবচেয়ে খারাপ পরিস্থিতি ঘটে যখন কিছু দূষিত আক্রমণকারী (ম্যালরি) ইচ্ছাকৃতভাবে আপনাকে ডেটা দেয় যা ম্যালরি বিশেষত সিস্টেমটি চালিয়ে যাওয়ার জন্য বেছে নিয়েছিল।

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

"ও (1) এমনকি খারাপ অবস্থাতেও" অনুসন্ধানের গ্যারান্টি দেয় এমন সমস্ত কৌশল যে গ্যারান্টিটি রাখার জন্য প্রতিটি সন্নিবেশকে কিছুটা অতিরিক্ত কাজ করে এই সমস্যাটি এড়ায়, ভবিষ্যতে, প্রতিটি সম্ভাব্য চেহারা ও (1) সময়ে সফল হতে পারে । বিশেষত, আমরা ধরে নিই (সবচেয়ে খারাপ পরিস্থিতি) যে ম্যালোরি শীঘ্রই বা পরে আবিষ্কার করবে যে আমরা কোন হ্যাশ ফাংশনটি ব্যবহার করছি; তবে আমরা কেবলমাত্র একটি ভিন্ন হ্যাশ ফাংশন বাছাই করার আগে কয়েকটি তথ্য আইটেম সন্নিবেশ করার সুযোগ পেয়েছি - ট্যাবুলেশন হ্যাশিং বা অন্য কোনও সার্বজনীন হ্যাশিং - একটি যা আমরা বিশেষভাবে নির্বাচন করি যে আমাদের এতক্ষণে থাকা সমস্ত ডেটা 2 এ দেখা যেতে পারে বা 3 টি প্রোব - যেমন, ও (1)। যেহেতু আমরা এলোমেলোভাবে এই ফাংশনটি নির্বাচন করি, আমরা মোটামুটি নিশ্চিত হতে পারি যে ম্যালরি কিছুক্ষণের জন্য আমরা কী ফাংশনটি বেছে নিয়েছিলাম তা জানে না। ম্যালোরি হলেওতাত্ক্ষণিকভাবে আমাদের এমন ডেটা দেয় যা এমনকি এই নতুন হ্যাশ ফাংশনটির সাথেও পূর্ববর্তী ডেটার সাথে সংঘর্ষ ঘটে, আমরা এরপরে আরও একটি নতুন নতুন হ্যাশ ফাংশন বেছে নিতে পারি, রিহ্যাশ করার পরে, তিনি এবং অন্য সবাই আমাদের খাওয়ানো সমস্ত পূর্ববর্তী ডেটা এখন দেখা যাবে সবচেয়ে খারাপ ক্ষেত্রে 2 বা 3 টি প্রোব আপ - যেমন, সবচেয়ে খারাপ ক্ষেত্রে ও (1) অনুসন্ধান।

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

  • কোকিল হ্যাশিং গ্যারান্টি দেয় যে প্রতিটি কী লুক সর্বাধিক 2 হ্যাশ গণনা এবং 2 টি টেবিল লুকআপ সাফল্য করে।
  • হপস্কোচ হ্যাশিং গ্যারান্টি দেয় যে টেবিলের অল্প সংখ্যক এইচ (সম্ভবত এইচ = 32) একটানা প্রবেশদ্বারগুলি পরিদর্শন করার পরে প্রতিটি কী লুক্স সফল হয়।
  • ডায়নামিক পারফেক্ট হ্যাশিং - ১৯৯৪ সালে ডায়েটফেল্বিংগার দ্বারা প্রকাশিত প্রথম পত্রটি আমি এটি পড়ে দেখিয়েছি যে, প্রতিটি কী অনুসন্ধান সর্বদা ২ টি হ্যাশ গণনা এবং 2 অনুসন্ধানে সফল হয় তার গ্যারান্টিটি দেওয়ার জন্য এটি "ঘন ঘন" পুনঃস্থাপন করে, এটি সম্ভব একটি সম্পূর্ণ পুনর্নির্মাণ খুব কমই করা যায় যে প্রতিটি পূর্ণ পুনঃস্থাপনে ও (এন) সময় ব্যবহার করা হলেও সন্নিবেশ এবং মুছার জন্য প্রত্যাশিত গড় ব্যয়কে ও (1) স্বতন্ত্র করে তোলা হয়েছে।

ডেটা স্ট্রাকচার / হ্যাশ টেবিলগুলি



5

স্ট্যাটিক সেটগুলির জন্য হ্যাশ টেবিল সন্ধান সর্বদা হতে পারে , 2002 এর আর্ন অ্যান্ডারসন এবং মিক্কেল থারুপের কাগজটি দেখুন: তাত্পর্যপূর্ণ অনুসন্ধানের গাছগুলির সাথে ডায়নামিক অর্ডার করা সেটO(1)

O(1)O(n2W)

O(logn/loglogn)O(1)


5

ha,b(x)=ax+bmodp

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

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

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


0

হ্যাশ-টেবিলগুলির জন্য গড় কেস বিশ্লেষণটি ইনপুটগুলির অভিন্নতার স্বাভাবিক অনুমানের অধীনে তৈরি করা হয়, যা একবার ইভেন্টের রেজার কারণে তৈরি হয় to

ডোমেন এবং কীগুলির বিতরণ সম্পর্কে আপনার যদি অতিরিক্ত জ্ঞান থাকে তবে আপনি একই গড়-কেস বিশ্লেষণ নিতে পারেন এবং আপনার বিতরণের সাথে অভিন্ন বিতরণটি প্রতিস্থাপন করতে পারেন এবং প্রত্যাশাগুলি অন্ততপক্ষে তত্ত্ব অনুসারে পুনরায় গণনা করতে পারেন।

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

স্পষ্টতই করণীয় সবচেয়ে সহজ কাজ হ'ল সিমুলেশন। হ্যাশ-টেবিলগুলি প্রয়োগ করুন এবং কীভাবে তারা আপনার সাধারণ ইনপুটগুলির সেটটি সম্পাদন করে তা পর্যবেক্ষণ করুন।


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

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

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

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

4
হ্যাঁ, আমি জানি এটি কীভাবে হয়েছে। (আমার প্রোফাইলটি দেখুন)) যদি আপনি চান যে আপনার বিশ্লেষণটি ভবিষ্যদ্বাণীপূর্ণ হয়ে উঠুক (যা বিশ্লেষণের পুরো বিষয়) তবে আপনাকে অবশ্যই হ্যাশ ফাংশনটি এলোমেলো করে তুলতে হবে। তারপরে আপনি সুনির্দিষ্ট বিতরণটি জানেন, কারণ আপনি এটি বাছাই করেছেন।
জেফে

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