আমি দুটি অ্যারেতে সেট অপারেশন সম্পাদন করতে, বা এই জাতীয় যুক্তি নিজেই প্রয়োগ করতে পারি (আদর্শভাবে কার্যকরীভাবে এবং দক্ষতার সাথে সম্ভব হিসাবে কার্যকর) এমন কোনও মানক গ্রন্থাগার কল রয়েছে কি?
আমি দুটি অ্যারেতে সেট অপারেশন সম্পাদন করতে, বা এই জাতীয় যুক্তি নিজেই প্রয়োগ করতে পারি (আদর্শভাবে কার্যকরীভাবে এবং দক্ষতার সাথে সম্ভব হিসাবে কার্যকর) এমন কোনও মানক গ্রন্থাগার কল রয়েছে কি?
উত্তর:
হ্যাঁ, সুইফ্টের Set
ক্লাস রয়েছে।
let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]
let set1:Set<String> = Set(array1)
let set2:Set<String> = Set(array2)
সুইফট +.০+ সেটগুলিতে অপারেশনগুলি করতে পারে:
firstSet.union(secondSet)// Union of two sets
firstSet.intersection(secondSet)// Intersection of two sets
firstSet.symmetricDifference(secondSet)// exclusiveOr
সুইফট ২.০ অ্যারে আর্গুমেন্টে গণনা করতে পারে:
set1.union(array2) // {"a", "b", "c", "d"}
set1.intersect(array2) // {"a", "b"}
set1.subtract(array2) // {"c"}
set1.exclusiveOr(array2) // {"c", "d"}
সুইফট 1.2+ সেটগুলিতে গণনা করতে পারে:
set1.union(set2) // {"a", "b", "c", "d"}
set1.intersect(set2) // {"a", "b"}
set1.subtract(set2) // {"c"}
set1.exclusiveOr(set2) // {"c", "d"}
আপনি যদি কাস্টম স্ট্রাক্ট ব্যবহার করছেন তবে আপনার পক্ষে হাস্যাবল প্রয়োগ করতে হবে।
সুইফেল ২.০ আপডেটের জন্য মন্তব্যে মাইকেল স্টারনকে ধন্যবাদ।
হাস্যাবল তথ্যের জন্য মন্তব্যে আমজাদ হাসিনীকে ধন্যবাদ জানাই।
set1.union(array2)
এবং set1.exclusiveOr(array2)
উভয়ই বৈধ, উপরোক্ত ফর্মগুলি ছাড়াও।
কোনও স্ট্যান্ডার্ড লাইব্রেরি কল নেই, তবে আপনি এক্সসুইফ্ট লাইব্রেরিটি দেখতে চাইতে পারেন । এর মধ্যে অ্যারেগুলিতে পার্থক্য, ছেদ এবং ইউনিয়ন সহ নতুন ক্রিয়াকলাপগুলি রয়েছে।
আপনি অবজেক্টিভ-সি এর মতো একই প্যাটার্নটি অনুসরণ করতে চাইতে পারেন, এতেও এই ধরণের ক্রিয়াকলাপের অভাব রয়েছে, তবে একটি সহজ উপায় রয়েছে:
আমি জানি সবচেয়ে দক্ষ পদ্ধতি হ'ল গডেল নম্বর ব্যবহার করে। গুডেল এনকোডিংয়ের জন্য গুগল।
ধারণাটি তাই। মনে করুন আপনার কাছে N সম্ভাব্য সংখ্যা রয়েছে এবং সেগুলির সেটগুলি তৈরি করা দরকার। উদাহরণস্বরূপ, এন = 100,000 এবং sets 1,2,3}, {5, 88, 19000} ইত্যাদির মতো সেট তৈরি করতে চান
ধারণাটি হ'ল এন প্রাইম সংখ্যাগুলির তালিকা মেমোরিতে রাখা এবং প্রদত্ত একটি সেট - ক, বি, সি, ...} হিসাবে আপনি এটিকে এনকোড করুন
prime[a]*prime[b]*prime[c]*...
সুতরাং আপনি একটি সেটকে বিগনম্বার হিসাবে এনকোড করেছেন। বড় সংখ্যাগুলির সাথে অপারেশনগুলি, যদিও এটি পূর্ণসংখ্যার সাথে অপারেশনগুলির তুলনায় তারা ধীর গতিতে এখনও বেশি দ্রুত।
2 সেট A, B একত্রিত করতে আপনি নিন
UNITE(A, B) = lcm(a, b)
এ এবং বি হিসাবে এ এবং বি এর সর্বনিম্ন-সাধারণ-একাধিক সেট এবং উভয় সংখ্যা।
চৌরাস্তাটি আপনি নিতে নিতে
INTERSECT(A, B) = gcd (a, b)
সর্বশ্রেষ্ঠ সাধারণ বিভাজক।
ইত্যাদি।
এই এনকোডিংটিকে গডেলাইজেশন বলা হয়, আপনি আরও গুগল করতে পারেন, ফ্রিজের লজিক ব্যবহার করে লিখিত সমস্ত পাটিগণিতের ভাষা এইভাবে সংখ্যা ব্যবহার করে এনকোড করা যায়।
অপারেশন পেতে কি সদস্য? এটা খুব সহজ -
ISMEMBER(x, S) = remainder(s,x)==0
কার্ডিনালটি পেতে এটি আরও কিছুটা জটিল -
CARDINAL(S) = # of prime factors in s
আপনি মৌলিক উপাদানগুলির উত্পাদনে সেটটি উপস্থাপন করে এস সংখ্যাটি পচন করুন এবং তাদের ক্ষয়কারীকে যুক্ত করুন। যদি সেটটি সদৃশদের অনুমতি না দেয় তবে আপনার সমস্ত এক্সপোজার 1 থাকবে।