বিভিন্ন ব্যবহারের ক্ষেত্রে সেট এবং ডিক্টস অনুকূলিত। একটি সেটটির প্রাথমিক ব্যবহার দ্রুত সদস্যতা পরীক্ষা করা, যা অর্জানস্টিক। ডিক্টসের জন্য, অনুসন্ধানের ব্যয়টি সর্বাধিক সমালোচিত অপারেশন এবং কীটি উপস্থিত থাকার সম্ভাবনা বেশি। সেটগুলির সাথে, কোনও উপাদানের উপস্থিতি বা অনুপস্থিতি আগে থেকেই জানা যায় না এবং সুতরাং সেট প্রয়োগটি পাওয়া যায় এবং পাওয়া যায় না উভয় ক্ষেত্রেই অনুকূল করা প্রয়োজন। এছাড়াও, ইউনিয়ন এবং ছেদকেন্দ্রের মতো সাধারণ সেট ক্রিয়াকলাপগুলির জন্য কিছু অপ্টিমাইজেশানগুলি কর্মক্ষমতা হ্রাস না করে সেট ক্রম বজায় রাখা কঠিন করে তোলে।
উভয় ডেটা স্ট্রাকচার হ্যাশ ভিত্তিক হলেও এটি একটি সাধারণ ভুল ধারণা যা সেটগুলি কেবল নাল মান সহ ডিক্ট হিসাবে প্রয়োগ করা হয়। এমনকি সামনে CPython 3.6 কম্প্যাক্ট অভি প্রয়োগ, সেট এবং অভি বাস্তবায়নের ইতিমধ্যে সামান্য কোড পুনঃব্যবহারের সঙ্গে উল্লেখযোগ্যভাবে ভিন্ন। উদাহরণস্বরূপ, ডিক্টগুলি এলোমেলোভাবে প্রোবিং ব্যবহার করে তবে সেটগুলি ক্যাশের লোকাল উন্নত করতে লিনিয়ার প্রোবিং এবং ওপেন অ্যাড্রেসিংয়ের সংমিশ্রণ ব্যবহার করে। প্রাথমিক লিনিয়ার প্রোব ( সিপাইটিতে ডিফল্ট 9 পদক্ষেপ ) হ্যাশ সংঘর্ষের হ্যান্ডলিংয়ের ব্যয় হ্রাস করে পারফরম্যান্স উন্নত করে সংযুক্ত কী / হ্যাশ জোড়াগুলির একটি সিরিজ পরীক্ষা করবে - ক্রমাগত মেমরি অ্যাক্সেস ছড়িয়ে ছিটিয়ে থাকা প্রোবের চেয়ে সস্তা।
সিপাইথনের সেট প্রয়োগ বাস্তবায়নকে কমপ্যাক্ট ডকের অনুরূপ রূপান্তর করা তত্ত্বের পক্ষে সম্ভব হবে , তবে বাস্তবে কিছুটা ত্রুটি রয়েছে এবং উল্লেখযোগ্য মূল বিকাশকারীরা এ জাতীয় পরিবর্তন আনার বিরোধিতা করেছিলেন।
সেটগুলি আনর্ডর্ডেড থাকে। (কেন? ব্যবহারের ধরণগুলি আলাদা Also এছাড়াও, বিভিন্ন বাস্তবায়ন।)
- গাইডো ভ্যান রসম
সেটগুলি একটি পৃথক অ্যালগরিদম ব্যবহার করে যা সন্নিবেশ ক্রম ধরে রাখার মতো তত সংশোধনযোগ্য নয়। অর্ডার প্রয়োজনে সেট-টু-সেট অপারেশনগুলি তাদের নমনীয়তা এবং অপ্টিমাইজেশানগুলি হারাবে। সেট গণিতটি আনর্ডারড সেটগুলির ক্ষেত্রে সংজ্ঞায়িত করা হয়। সংক্ষেপে, সেট অর্ডারিং তাৎক্ষণিক ভবিষ্যতে নয় isn't
- রেমন্ড হেট্টিংগার
৩.7-এর জন্য সেটগুলি সংহত করতে হবে কিনা তার একটি বিশদ আলোচনা এবং কেন এর বিরুদ্ধে সিদ্ধান্ত নেওয়া হয়েছিল সে সম্পর্কে উত্তর পাইথন-ডেভ মেইলিং তালিকায় পাওয়া যাবে।
সংক্ষেপে, প্রধান বিষয়গুলি হ'ল ব্যবহারের ধরণগুলি পৃথক (সন্নিবেশ ক্রম ডিক্ট যেমন ** কোয়ার্গস দরকারী , সেটের জন্য কম), কমপ্যাক্ট সেটগুলির জন্য স্থান সঞ্চয় কম তাৎপর্যপূর্ণ (কারণ এখানে কেবল কী এবং হ্যাশ অ্যারে রয়েছে) ঘনক্ষেত্র, কীগুলি, হ্যাশগুলি এবং মানগুলির বিপরীতে) এবং সেটগুলিতে পূর্বোক্ত রৈখিক অনুসন্ধানের অপ্টিমাইজেশানটি একটি কমপ্যাক্ট প্রয়োগের সাথে বেমানান।
আমি নীচে রেমন্ডের পোস্টটি পুনরুত্পাদন করব যা সবচেয়ে গুরুত্বপূর্ণ পয়েন্টগুলিকে coversেকে রাখে।
14 ই সেপ্টেম্বর, 2016, বিকাল 3:50 এ, এরিক স্নো লিখেছেন:
তারপরে, আমি সেটগুলিতেও তাই করব।
আমি ভুল বুঝে না নিলে রেমন্ড সেটে একই রকম পরিবর্তন আনার বিরোধিতা করেছিল।
সেটা ঠিক. লোকেরা বুনো চালানো শুরু করার আগে এখানে এই বিষয়ে কয়েকটি চিন্তাভাবনা দেওয়া হল।
কমপ্যাক্ট ডিকের জন্য, স্পেস সঞ্চয়গুলি সূচকগুলি দ্বারা অতিরিক্ত ব্যবহৃত স্থান এবং কী / মান / হ্যাশ অ্যারেগুলির জন্য সামগ্রিকভাবে কী / মান / হ্যাশ অ্যারের উন্নত ঘনত্ব দ্বারা অফসেটের চেয়ে বেশি হয়ে ওঠা সামগ্রিকভাবে জয়ের ছিল। তবে সেটগুলির জন্য, নেটটি অনেক কম অনুকূল ছিল কারণ আমাদের এখনও সূচকগুলি এবং সামগ্রিকভাবে প্রয়োজন তবে কেবলমাত্র তিনটি অ্যারের মধ্যে দু'টি ঘনঘটিত করে কেবল স্থানের ব্যয়টি অফসেট করতে পারি। অন্য কথায়, আপনি কী, মান এবং হ্যাশগুলির জন্য স্থান নষ্ট করার পরে কমপ্যাক্টিং আরও বেশি অর্থবোধ করে। যদি আপনি এই তিনটির মধ্যে একটি হারান, তবে এটি বাধ্য করা বন্ধ করে দেয়।
সেটগুলির ব্যবহারের প্যাটার্নটি ডিক্ট থেকে আলাদা is প্রাক্তনটির আরও হিট বা মিস লুক রয়েছে। পরবর্তীটির কী কী লুকআপ কম রয়েছে। এছাড়াও, সেট-টু-সেট ক্রিয়াকলাপগুলির জন্য কয়েকটি অপ্টিমাইজেশন পারফরম্যান্সকে প্রভাবিত না করে সেট ক্রম বজায় রাখা কঠিন করে তোলে।
আমি সেট কর্মক্ষমতা উন্নয়নের জন্য বিকল্প পথ অনুসরণ করেছি। কমপ্যাক্ট করার পরিবর্তে (যা স্পেস জয়ের পক্ষে খুব বেশি কিছু ছিল না এবং অতিরিক্ত নির্দেশের জন্য ব্যয়ও ঘটেনি), আমি সংঘর্ষের ব্যয় হ্রাস করতে এবং ক্যাশের কার্যকারিতা উন্নত করতে লিনিয়ার প্রোব যুক্ত করেছি। এই উন্নতিটি আমি অভিধানগুলির পক্ষে পরামর্শ দিয়েছি এমন কমপ্যাক্ট পদ্ধতির সাথে বেমানান।
আপাতত, অভিধানগুলিতে অর্ডারের পার্শ্ব-প্রতিক্রিয়াটি গ্যারান্টিযুক্ত নয়, সুতরাং সেটগুলিও আদেশ হয়ে ওঠার জন্য জোর দেওয়া শুরু করা অকাল। দস্তাবেজগুলি ইতিমধ্যে একটি অর্ডারসেট ( https://code.activestate.com/recips/576694/ ) তৈরির একটি রেসিপিটির সাথে লিঙ্ক করেছে তবে দেখে মনে হচ্ছে আপটিকটি
প্রায় শূন্য হয়েছে। এছাড়াও, এখন যে এরিক স্নো আমাদের একটি দ্রুত অর্ডারডিক্ট দিয়েছে তাই মিউটেবলসেট এবং অর্ডারডিক্ট থেকে অর্ডারসেট তৈরি করা আগের চেয়ে সহজ, তবে আমি আবার কোনও সত্য আগ্রহ দেখিনি কারণ আদর্শ সেট-টু-সেট ডেটা অ্যানালিটিকাগুলি সত্যিই দেয় না অর্ডার সম্পর্কে প্রয়োজন বা যত্ন। তেমনি, দ্রুত সদস্যতার পরীক্ষার প্রাথমিক ব্যবহার হ'ল অর্জানস্টিক।
এটি বলেছিল, আমি মনে করি পিআইপিআইতে বিকল্প সেট বাস্তবায়ন যুক্ত করার মতো জায়গা আছে। বিশেষত, অগ্নিপরীক্ষাযোগ্য ডেটার জন্য কিছু আকর্ষণীয় বিশেষ কেস রয়েছে যেখানে সেট-টু-সেট ক্রিয়াকলাপগুলি কীগুলির সম্পূর্ণ ব্যাপ্তিগুলির সাথে তুলনা করে বাড়ানো যায় (দেখুন https://code.activestate.com/recips/230113- বাস্তবায়ন-of-
একটি প্রারম্ভিক পয়েন্টের জন্য ব্যবহার করে সাজানো-তালিকা সেট করে )। আইআইআরসি, পাইপিআই এর মধ্যে ইতিমধ্যে সেট-মতো ব্লুম ফিল্টার এবং কোকিল হ্যাশিংয়ের কোড রয়েছে।
আমি বুঝতে পেরেছি যে পাইথন কোরটিতে কোডের একটি বড় ব্লক গ্রহণ করা উত্তেজনাকর তবে এটি প্ল্যান্ট হওয়া নিশ্চিত না হওয়া অবধি অন্য ডেটাটাইপগুলির আরও বড় পুনর্লিখনগুলিতে জড়িত হওয়ার জন্য প্লাবনগঠনের জন্য এটি না খোলার উচিত।
- রেমন্ড হেট্টিংগার
থেকে [পাইথন-dev] পাইথন 3.6 অভি কম্প্যাক্ট হয়ে যায় এবং একটি প্রাইভেট সংস্করণটি; এবং কীওয়ার্ডগুলি অর্ডার হয়ে যায় , সেপ্টেম্বর 2016।