হ্যাশ টেবিলগুলি ভিএস সহযোগী অ্যারেগুলি


84

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


উত্তর:


123

পিএইচপি-তে, সহযোগী অ্যারেগুলি হ্যাশ টেবিল হিসাবে প্রয়োগ করা হয়, কিছুটা অতিরিক্ত কার্যকারিতা সহ।

তবে প্রযুক্তিগতভাবে বলতে গেলে, কোনও এসোসিয়েটিভ অ্যারে হ্যাশটেবলের সমতুল্য নয় - এটি কেবল পর্দার আড়ালে হ্যাশটেবলের অংশে প্রয়োগ করা হয়। কারণ এর বাস্তবায়ন বেশিরভাগ হ্যাশটেবল, এটি হ্যাশটেবল যা করতে পারে তা করতে পারে - তবে এটি আরও অনেক কিছু করতে পারে।

উদাহরণস্বরূপ, আপনি একটি মিশুক অ্যারের মাধ্যমে লুপের জন্য লুপ ব্যবহার করে লুপ করতে পারেন, যা আপনি হ্যাশটেবলের সাহায্যে করতে পারবেন না।

সুতরাং যখন তারা একই রকম হয়, কোনও মিশুক অ্যারে আসলে হ্যাশটেবল কী করতে পারে তার একটি সুপারসেট করতে পারে - সুতরাং তারা ঠিক একই জিনিস নয়। এটিকে হ্যাশটেবল প্লাস অতিরিক্ত কার্যকারিতা হিসাবে ভাবেন।

কোড উদাহরণ:

মিশ্রণমূলক অ্যারেটিকে হ্যাশটেবল হিসাবে ব্যবহার করা :

$favoriteColor = array();
$favoriteColor['bob']='blue';
$favoriteColor['Peter']='red';
$favoriteColor['Sally']='pink';
echo 'bob likes: '.$favoriteColor['bob']."\n";
echo 'Sally likes: '.$favoriteColor['Sally']."\n";
//output: bob likes blue
//        Sally likes pink

একটি সহযোগী অ্যারে মাধ্যমে লুপিং :

$idTable=array();
$idTable['Tyler']=1;
$idTable['Bill']=20;
$idTable['Marc']=4;
//up until here, we're using the array as a hashtable.

//now we loop through the array - you can't do this with a hashtable:
foreach($idTable as $person=>$id)
    echo 'id: '.$id.' | person: '.$person."\n";

//output: id: 1 | person: Tyler
//        id: 20 | person: Bill
//        id: 4 | person: Marc

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


4
হুমমম, এত সংক্ষিপ্ত ব্যাখ্যা explanation সুতরাং তারা কোনোরকম একই জিনিস?
বখতিয়র

4
@ বাক তারা সাধারণভাবে নয়, তবে তারা পিএইচপি-তে রয়েছে যা ডেটা স্ট্রাকচারের সাথে কিছুটা দ্রুত এবং আলগাভাবে অভিনয় করে যেহেতু পারফরম্যান্স নিয়ে কোনও উদ্বেগ কম নয়
মাইকেল মরোজেক

আমি দেখছি, তবে এই ক্ষেত্রে কেন হ্যাশ ফাংশন এবং স্টাফের জন্য এতগুলি অ্যালগরিদম রয়েছে, যদি হ্যাশ ফাংশন = অ্যারে হয়?
বখতিয়র

4
@ মিশেল আপনি কি এটি একটি অসুবিধে মত মনে করেন? এটি পিএইচপি আলাদা করে তোলে, তবে আমি মনে করি এটি একটি ভাল পার্থক্য।

4
@ বাখতিওর: আপনার শেষ বাক্যটি নিখুঁত। যদিও হ্যাশ টেবিলগুলি সম্পর্কে আপনার 'ভুলে যাওয়ার' দরকার নেই - বাস্তবে এটি দুর্দান্ত আপনি ইতিমধ্যে হ্যাশটবেলগুলি বুঝতে পেরেছেন, কারণ এখন আপনি সেই জ্ঞানটি এসোসিয়েটিভ অ্যারেগুলিতে প্রয়োগ করতে পারেন। আপনার উত্তরটি আরও স্পষ্ট করার জন্য আমি আমার উত্তরে কয়েকটি উদাহরণ যুক্ত করছি।
ক্যাম

21

পিএইচপি অ্যারেগুলি হ্যাশ টেবিলগুলি মূলত রয়েছে


সম্পাদনা: আহ - আমাকে এটি মারুন :) +1।
ক্যাম

আমি যা খুঁজছিলাম তা হ'ল :)
ফয়জান

11
কোনভাবেই না. একটি হ্যাশ টেবিলের জন্য কিছু ধরণের সংঘর্ষের রেজোলিউশন প্রয়োজন হবে, যা পিএইচপি অ্যারেতে নেই। তাদের সংঘর্ষের সমাধানের কৌশলটি কেবলমাত্র পুরানো মানকে প্রতিস্থাপন করছে, এবং সংজ্ঞা অনুসারে কোনও হ্যাশ টেবিল নয়।
জুয়ান

4
আমি যতদূর মনে করতে পারি, হ্যাশ টেবিলগুলিতে সংঘর্ষের রেজোলশন হ্যাশ কীটির জন্য, মূল কী নয় (এটি কীভাবে কাজ করা উচিত?)
ইমানুয়েল ওস্টার

18

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

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

পার্ল দু'টি ধারণা একসাথে মিশিয়ে অ্যারেটিভ অ্যারেগুলিকে "হ্যাশ" বলে ডেকে আনে। পার্লের বেশ কয়েকটি বৈশিষ্ট্যের মতো এটি মোটেও ভুল নয়, তবে এটি ম্লান।


7

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


4
"মানচিত্র থেকে কোনও উপাদান আনার জটিলতা হ'ল ও (এনলগন)" - এটি সহজ নয়। এমনকি লিংকডলিস্টের জন্যও, প্রদত্ত উপাদান আনতে কেবল ও (এন)। কি, আরো হিসাবে এ সম্বোধন en.wikipedia.org/wiki/Hash_table , হ্যাশ পিএইচপি ব্যবহার টেবিল একটি মিশুক অ্যারে (1) হে লুকআপ হয়েছে বাস্তবায়ন
StackG

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

2

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

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

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