মানচিত্র এবং অভিধানের মধ্যে পার্থক্য কী?


196

আমি জানি একটি মানচিত্র একটি ডেটা কাঠামো যা মানগুলির কীগুলি ম্যাপ করে। অভিধান কি এক নয়? মানচিত্র এবং অভিধান 1 এর মধ্যে পার্থক্য কী ?


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


দুর্দান্ত প্রশ্ন!
নোনেম

উত্তর:


258

একই জিনিস জন্য দুটি পদ:

  • "মানচিত্র" জাভা, সি ++ ব্যবহার করে
  • "অভিধান" ব্যবহার করেছেন। নেট, পাইথন
  • "সহযোগী অ্যারে" পিএইচপি ব্যবহার করে

"মানচিত্র" হ'ল সঠিক গাণিতিক শব্দ, তবে এটি এড়ানো হয় কারণ এটি কার্যকরী প্রোগ্রামিংয়ের আলাদা অর্থ রয়েছে ।

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

আরও তথ্যের জন্য এখানে দেখুন ।


7
জাভা-র মানচিত্র এবং অভিধান উভয়ই নেই? সেখানে পার্থক্য কী?
বিবেক_জোনাম

35
@ বিবেক_জোনাম: Dictionaryজাভা অপ্রচলিত। এটি একটি বিমূর্ত শ্রেণি, Mapইন্টারফেস তৈরির আগে ব্যবহৃত হয় ।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

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

1
"টেবিল" লুয়া ব্যবহৃত হয়।
উত্সাহীকারী

1
এটিকে কিছুটা বিভ্রান্তিকরভাবে
জেএসএন

20

একটি অন্যটির জন্য পুরানো শব্দ। সাধারণত "অভিধান" শব্দটি গাণিতিক শব্দ "মানচিত্র" ধরার আগে ব্যবহৃত হত। এছাড়াও, অভিধানগুলিতে একটি মূল ধরণের স্ট্রিং থাকে, তবে এটি সর্বত্র 100% সত্য নয়।


9

আমার 2 সেন্ট।

অভিধান জাভাতে একটি বিমূর্ত শ্রেণি যেখানে মানচিত্র একটি ইন্টারফেস। যেহেতু, জাভা একাধিক উত্তরাধিকার সমর্থন করে না, যদি কোনও শ্রেণি অভিধানকে প্রসারিত করে তবে এটি অন্য কোনও শ্রেণি প্রসারিত করতে পারে না।

সুতরাং, মানচিত্র ইন্টারফেস চালু করা হয়েছিল।

অভিধান শ্রেণি অপ্রচলিত এবং মানচিত্রের ব্যবহার পছন্দ করা হয়।


9

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

পরিভাষা ব্যাখ্যা করা হয়েছে

অক্সফোর্ড বিশ্ববিদ্যালয় অভিধানের কম্পিউটার বিজ্ঞানের তালিকা:

অভিধানের যে কোনও ডেটা স্ট্রাকচার এমন উপাদানগুলির একটি সেট উপস্থাপন করে যা উপাদান সন্নিবেশ এবং মোছার পাশাপাশি সদস্যতার জন্য পরীক্ষা সমর্থন করতে পারে

  • উদাহরণস্বরূপ, আমাদের মধ্যে একটি উপাদান রয়েছে {এ, বি, সি, ডি ...? যা আমরা সন্নিবেশ করতে সক্ষম হয়েছি এবং মোছা শুরু করতে পেরেছি, এবং আমরা "সি উপস্থিত?"

মানচিত্রের কম্পিউটিং সায়েন্স ধারণাটি গাণিতিক ভাষাগত শব্দ ম্যাপিংয়ের উপর ভিত্তি করে তৈরি হয়েছে , যা অক্সফোর্ড ডিকশনারি সংজ্ঞায়িত করেছেন:

ম্যাপিং এমন ক্রিয়াকলাপ যা প্রদত্ত সেট (ডোমেন) এর প্রতিটি উপাদানকে দ্বিতীয় সেট (ব্যাপ্তি) এর এক বা একাধিক উপাদানের সাথে যুক্ত করে।

  • যেমন, মানচিত্রের ডেটা স্ট্রাকচার একটি নির্দিষ্ট সেটের উপাদানগুলির থেকে ম্যাপের " কী " হিসাবে পরিচিত, দ্বিতীয় সেটের এক বা একাধিক উপাদানগুলিতে - সম্পর্কিত " মান (গুলি) " হিসাবে পরিচিত হিসাবে যেতে একটি উপায় সরবরাহ করে ।
  • "দ্বিতীয় সেটে ... বা একাধিক উপাদান" দৃষ্টিভঙ্গি একটি বাস্তবায়ন দ্বারা সমর্থিত হতে পারে দুটি স্বতন্ত্র পথ হল:
    • অনেকগুলি মানচিত্রের প্রয়োগগুলি কীগুলির স্বতন্ত্রতা প্রয়োগ করে এবং কেবল প্রতিটি কীকে একটি মানের সাথে যুক্ত করার অনুমতি দেয়, তবে সেই মানটি একটি উপাত্ত কাঠামো হতে পারে যা একটি সহজ ডেটা ধরণের অনেকগুলি মান যুক্ত করে, যেমন {{1, {"এক" , "আইচি"}, {2, two "দুই", "নী"}} pairs জোড় স্ট্রিং সমন্বিত মান চিত্রিত করে।
    • অন্যান্য মানচিত্রের প্রয়োগগুলি প্রতিটি ম্যাপিংকে একই বা বিভিন্ন মানগুলিতে ডুপ্লিকেট কীগুলি মঞ্জুরি দেয় - যা "সহযোগী ... প্রতিটি [মূল] উপাদানকে ... আরও ... [একাধিক] [মান] উপাদান" কেস হিসাবে কার্যকরী করে। উদাহরণস্বরূপ, {{1, "এক"},} 1, "আইচি"}, {2, "দুই"}, {2, "নী"}}}

অভিধান এবং মানচিত্র বিপরীতে আছে

সুতরাং, উপরের কঠোর কমপ্যাক্ট সায়েন্স পরিভাষাটি ব্যবহার করে, অভিধান অভিধানটি কেবলমাত্র একটি মানচিত্র হয় যদি ইন্টারফেসটি প্রতিটি অভিধানের প্রয়োজন হয় না এমন অতিরিক্ত ক্রিয়াকলাপ সমর্থন করে:

  • স্বতন্ত্র সঙ্গে দোকান উপাদান করার ক্ষমতা কী এবং মান উপাদান

  • কেবলমাত্র প্রদত্ত মান (গুলি) পুনরুদ্ধার করার ক্ষমতা

একটি তুচ্ছ মোচড়:

  • মানচিত্রের ইন্টারফেসটি সম্ভবত কোনও {কী, মান} জোড়াটি ধারকটিতে রয়েছে কিনা তা পরীক্ষা করে সরাসরি সমর্থন করে না, যা প্রাথমিকভাবে এমন একটি অভিধানের প্রয়োজন যেখানে উপাদানগুলি {কী, মান} জোড়া হয়; কোনও মানচিত্রটিতে কোনও কীটির পরীক্ষা করার জন্য একটি ফাংশনও নাও থাকতে পারে তবে সবচেয়ে খারাপভাবে আপনি দেখতে পাচ্ছেন যে কোনও চেষ্টা-করা-পুনরুদ্ধার-বাই-কী সফল হয় বা ব্যর্থ হয়, তবে আপনি যদি যত্নশীল হন তবে কীটি কোনও প্রত্যাশিত মান পুনরুদ্ধার করেছে কিনা তা পরীক্ষা করতে পারেন।

আপনার দর্শকদের কাছে নির্বিঘ্নে যোগাযোগ করুন

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

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

নির্দিষ্ট প্রয়োগের সাথে ক্রসফেরেন্সিং কমপ সায়েন্স পরিভাষা

সি ++ স্ট্যান্ডার্ড লাইব্রেরি

  • মানচিত্র: map, multimap, unordered_map,unordered_multimap
  • অন্যান্য অভিধান: set, multiset, unordered_set,unordered_multiset
  • নোট: iterators সহ বা std::findআপনি সদস্যপদের জন্য একটি উপাদান এবং পরীক্ষা মুছে ফেলতে পারেন array, vector, list, dequeইত্যাদি, কিন্তু ধারক ইন্টারফেসগুলি সরাসরি সমর্থন না, কারণ একটি উপাদান খোঁজার হে (ঢ) এ দর্শনীয়ভাবেই অদক্ষ হয়, কিছু কিছু ক্ষেত্রে সন্নিবেশ / মুছে ফেলুন হয় অদক্ষ, এবং এই ক্রিয়াকলাপগুলিকে সমর্থন করে কনটেইনারটি ইচ্ছাকৃতভাবে সীমাবদ্ধ এপিআইকে হ্রাস করে - যেমন dequeগুলি কেবল সামনের দিকে এবং পিছনে মুছা / পপকে সমর্থন করা উচিত এবং কিছু কী এর শর্ত নয়। অনুসন্ধানে অর্কেস্টেট করার জন্য কোডে আরও কাজ করার পরে প্রোগ্রামারকে আরও দক্ষ অনুসন্ধানের সাথে একটি ধারক ডেটা কাঠামোতে স্যুইচ করতে উত্সাহ দেয়।

... পরে অন্য ভাষা যুক্ত করতে পারে / এডিট করতে নির্দ্বিধায় ...


3

সাধারণত আমি ধরে নিই যে কোনও মানচিত্রের একটি হ্যাশ টেবিলের সাহায্যে সমর্থন রয়েছে; এটি একটি অর্ডারযুক্ত স্টোরকে বোঝায়। অভিধানগুলি অর্ডার করা স্টোরকে বোঝায়।

একটা গাছ-ভিত্তিক অভিধান একটি বলা হয় মধ্যে Trie

লিস্পে, এটি দেখতে দেখতে এটির মতো হতে পারে:

(a (n (d t)) n d )

যা শব্দগুলিকে আবদ্ধ করে:

  • একটি
  • এবং
  • পিপীলিকা
  • একটি
  • বিজ্ঞাপন

উপর থেকে পাতা পর্যন্ত ট্র্যাভারসাল একটি শব্দ দেয়।


4
Dictionaryইন। নেট আনঅর্ডারড।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

2
কোকো অভিধানগুলিও আনর্ডারড।
কেন

সি ++ std::mapঅর্ডার করা হয় এটি বাস্তবায়নের মান হিসাবে নির্দিষ্ট করা হয়নি std::unordered_map, এটি সি ++ 11 এ প্রবর্তিত হয়েছিল, এটি একটি হ্যাশের মাধ্যমে প্রয়োগ করা হয়েছে
হ্যারাল্ড শাইরিখ

3
@ হ্যারাল্ডশাইরিচ - যদিও সি ++ স্ট্যান্ডার্ডটি নির্দিষ্টভাবে বলেছে না "আপনি বাস্তবায়নের জন্য একটি লাল-কালো গাছ std::mapব্যবহার করবেন", অন্য কিছু ব্যবহার করার চেষ্টা করুন। একটি এভিএল গাছ কাজ করবে না; এটি সন্নিবেশের ব্যয়গুলি মানটির সাথে মেলে না। একটি হ্যাশ কাজ করবে না; একটি হ্যাশ আনঅর্ডারড এবং সুতরাং মানটি পূরণ করে না। মানকটি খুব বেশি বলে যে "আপনি বাস্তবায়নের জন্য একটি লাল-কালো গাছ ব্যবহার করুন std::map" এতটা স্পষ্ট করে না বলে।
ডেভিড হামেন

+1 টি। যদিও অভিধানগুলি অনেকগুলি প্ল্যাটফর্মে আনর্ডার্ড হয় না, শব্দটি একটি অর্ডারকে বোঝায়। আমি শব্দটি মানচিত্রটি বেশি পছন্দ করি।
নওফাল

2

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

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

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

মনে রাখবেন যে জাভা রক্ষণাবেক্ষণকারীরা ADT সংজ্ঞাগুলির রক্ষণাবেক্ষণকারী নয় এবং জাভা সংক্রান্ত সিদ্ধান্তগুলি বিশেষত জাভার জন্য are


1

এই ধারণার জন্য অন্যান্য শর্তাদি যা মোটামুটি সাধারণ: এসোসিয়েটিভ অ্যারে এবং হ্যাশ।


1
হ্যাশ এর সাথে কিছুই করার নেই। অবজেক্টগুলি পৃথক কিনা তা দ্রুত সনাক্ত করার একটি পদ্ধতি। আপনি একটি হ্যাশম্যাপের কথা ভাবছেন, যা মানচিত্র / অভিধানের কাজটি করার জন্য একটি হ্যাশ ব্যবহার করে।
ডিজেক্লেওয়ার্থ

5
@ ডিজেক্লেওয়ার্থ না, অনেক প্রোগ্রামিং ভাষা আসলে এই জিনিসগুলিকে হ্যাশ বলে call রুবি দেখুন । আমি এটি নকশা করিনি, এবং আমি এটি কল করব না, তবে মেসেঞ্জারকে গুলি করব না।
হ্যাঙ্ক গে

1

হ্যাঁ, সেগুলি একই, আপনি মিশ্রণটিতে "সহযোগী অ্যারে" যুক্ত করতে পারেন।

ব্যবহার Hashtable বা একটি Hashofter বাস্তবায়ন বোঝায়।


1

সুতরাং একটি খাঁটি তাত্ত্বিক স্তরে।

একটি অভিধান হ'ল একটি মান যা একটি লিঙ্কযুক্ত মান সনাক্ত করতে ব্যবহার করা যেতে পারে। মানচিত্র এমন একটি মান যা অন্য মানগুলি কীভাবে সনাক্ত করতে হয় সে সম্পর্কে নির্দেশাবলী সরবরাহ করে

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

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


-2

এগুলি একই ধারণার জন্য দুটি পৃথক পদ।
Hashtableএবং HashMapএকই ধারণা উল্লেখ করুন।


3
প্রকৃতপক্ষে, হ্যাশটেবল / হ্যাশম্যাপ তাদের নামে একটি নির্দিষ্ট প্রয়োগকে বোঝায় (বনাম বলুন একটি ভারসাম্য গাছ, উদাহরণস্বরূপ C ++ std :: মানচিত্রে ব্যবহৃত হয়)।
জো

সাধারণভাবে, আপনার বাস্তবায়ন সম্পর্কে যত্ন নেওয়া উচিত নয়। (পারফরম্যান্সের কারণ ব্যতীত) এছাড়াও, এটি সর্বদা সত্য নয়; নেট। উদাহরণস্বরূপ দেখুন।
স্ল্যাक्स

-2

মূল পার্থক্যটি হ'ল মানচিত্রের জন্য সমস্ত প্রবেশ (মান এবং কী জুড়ি) এর একটি অনন্য কী থাকা প্রয়োজন। যদি সংঘর্ষগুলি ঘটে থাকে, অর্থাত্ যখন কোনও নতুন এন্ট্রি সংগ্রহের মধ্যে ইতিমধ্যে একটি এন্ট্রি হিসাবে একই কী থাকে, তবে সংঘর্ষের হ্যান্ডলিং প্রয়োজন required

সাধারণত, আমরা পৃথক চেইনিং ব্যবহার করে সংঘর্ষগুলি পরিচালনা করি । বা লিনিয়ার প্রোবিং

একটি অভিধান একাধিক এন্ট্রি একই কী সাথে লিঙ্ক করার অনুমতি দেয়।

যখন কোনও মানচিত্র পৃথক শৃঙ্খলা প্রয়োগ করে, তখন এটি অভিধানের মতো হয়।

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