এখানে আমার 1:7
চারটি পৃথক পার্টিশনের জন্য পূর্ণসংখ্যা রয়েছে , যেমন {1}, {2,3,4}, {5,6}, এবং {7} এবং সেই পার্টিশনগুলি একটি তালিকায় লিখিত আছে, অর্থাৎ list(1,c(2,3,4),c(5,6),7)
। আমি পার্টিশনগুলিকে সেট হিসাবে বিবেচনা করি, যেমন একটি পার্টিশনের মধ্যে উপাদানগুলির পৃথক ক্রিয়াকলাপ একই হিসাবে স্বীকৃত হওয়া উচিত। উদাহরণস্বরূপ, list(1,c(2,3,4),c(5,6),7)
এবং list(7,1,c(2,3,4),c(6,5))
সমতুল্য।
মনে রাখবেন যে তালিকার উপাদানগুলির জন্য কোনও পুনরাবৃত্তি নেই , যেমন, না list(c(1,2),c(2,1),c(1,2))
, যেহেতু এই সমস্যাটি পুরো সেটটিতে একচেটিয়া পার্টিশন নিয়ে আলোচনা করছে।
আমি lst
নীচে তালিকাতে বিভিন্ন অনুমোদনের কিছু তালিকাভুক্ত করেছি
lst <- list(list(1,c(2,3,4),c(5,6),7),
list(c(2,3,4),1,7,c(5,6)),
list(1,c(2,3,4),7,c(6,5)),
list(7,1,c(3,2,4),c(5,6)))
এবং আমি যা করতে চাই তা হল যাচাই করা সমস্ত অনুমতি সমান are যদি হ্যাঁ, তবে আমরা ফলাফল পেতে TRUE
।
আমি এ পর্যন্ত যা করেছি তা হ'ল প্রতিটি পার্টিশনের মধ্যে উপাদানগুলি বাছাই করা, এবং এর সাথে ব্যবহার setdiff()
করা interset()
এবং union()
এটি বিচার করা (নীচে আমার কোড দেখুন)
s <- Map(function(v) Map(sort,v),lst)
equivalent <- length(setdiff(Reduce(union,s),Reduce(intersect,s),))==0
যাইহোক, আমি অনুমান করি যখনই পার্টিশনের আকার স্কেল হবে তখন এই পদ্ধতিটি ধীর হবে। এটির জন্য আরও দ্রুত কোন পন্থা রয়েছে? অগ্রিম প্রশংসা!
- কিছু পরীক্ষার কেস (ছোট আকারের ডেটা)
# should return `TRUE`
lst1 <- list(list(1,c(2,3,4),c(5,6)),
list(c(2,3,4),1,c(5,6)),
list(1,c(2,3,4),c(6,5)))
# should return `TRUE`
lst2 <- list(list(1:2, 3:4), list(3:4, 1:2))
# should return `FALSE`
lst3 <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,5),c(6,4)))
lst_equal = list(list(1:2, 3:4), list(3:4, 1:2))
এবং ফলাফল যেখানে পাওয়া উচিত FALSE
, সেগুলিও সম্ভবতlst_false <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,5),c(6,4)))
FALSE
। এইভাবে, যখন কোনও উত্তর কোনও ক্ষেত্রে কাজ করে, তবে সমস্ত নয়, পরীক্ষার ক্ষেত্রে, কেন এটি নির্ণয় করা সহজ। যখন কেবলমাত্র একটি উদাহরণ রয়েছে, আপনি পরীক্ষার ফলাফলগুলিতে উপকার হারাবেন। যারা ইতিমধ্যে তাদের উপর কাজ করেছেন তাদের অধীনে বিদ্যমান উদাহরণগুলি পরিবর্তনের পরিবর্তে নতুন উদাহরণ যুক্ত করাও ভাল।
lst
সম্ভাব্য দীর্ঘ হলে আপনি অন্যান্য পদ্ধতির সাথে দক্ষতা অর্জন করতে পারেন। উদাহরণস্বরূপ, একটি প্রথম চেক যা length(unique(lengths(lst))) == 1
খুব দ্রুত ফিরে আসবে FALSE
যদি অভ্যন্তরীণ তালিকার
lst
তুলনা lst[[i]]
করে একবারে একটি আইটেম যেতে চাইবেন এবং lst[[1]]
সমস্ত তুলনা না করে আপনি কোনও অমিল খুঁজে পাওয়ার সাথে সাথে থামতে পারবেন। যদি lst
দীর্ঘ হয় এবং FALSE
সাধারণ হয় তবে এটি একটি বৃহত দক্ষতা অর্জন হতে পারে তবে অন্যথায় এটির পক্ষে সম্ভবত এটি উপযুক্ত নয়।
Map
কল এড়াতে পারবেন