পার্টিতে দেরি হলে আমাকে ক্ষমা করুন। ;)
যদি এক পরীক্ষা করার জন্য set Aএর উপসেট set B, Pythonহয়েছে A.issubset(B)এবং A <= B। এটা তোলে উপর কাজ করে setকেবল কাজ করে মহান কিন্তু অভ্যন্তরীণ বাস্তবায়ন জটিলতা অজানা। তথ্যসূত্র: https://docs.python.org/2/library/sets.html#set-objects
আমি নীচের মন্তব্যে list Aএকটি উপসেট কিনা তা পরীক্ষা করতে একটি অ্যালগরিদম নিয়ে এসেছি list B।
- সাবসেটের সন্ধানের জটিলতা হ্রাস করতে, সাবসেটের
sortজন্য যোগ্যতার সাথে উপাদানগুলির তুলনা করার আগে আমি উভয় তালিকার পক্ষে এটি উপযুক্ত মনে করি
।
- এটা আমার কাছে সাহায্য করেছিল যখন দ্বিতীয় তালিকার উপাদান এর মান প্রথম তালিকার উপাদান এর মান চেয়ে বেশী ।
breakloopB[j]A[i]
last_index_jশুরু করার জন্য ব্যবহার করা হয় loopবেশি list Bযেখানে গত শেষ করেছিলেন। এটি শুরু থেকে তুলনা শুরু করা এড়াতে সহায়তা করে
list B( এটি পরবর্তীকালে list Bথেকে শুরু করার জন্য, যা আপনি অপ্রয়োজনীয় অনুমান করতে পারেন ))index 0iterations
O(n ln n)উভয় তালিকা বাছাই করার O(n)জন্য এবং সাবসেটের জন্য পরীক্ষার জন্য জটিলতা হবে ।
O(n ln n) + O(n ln n) + O(n) = O(n ln n)।
কোড প্রচুর আছে printকি প্রতিটি ঘটছে দেখতে বিবৃতি iterationএর loop। এগুলি কেবল বোঝার জন্য।
একটি তালিকা অন্য তালিকার উপসেট কিনা তা পরীক্ষা করে দেখুন
is_subset = True;
A = [9, 3, 11, 1, 7, 2];
B = [11, 4, 6, 2, 15, 1, 9, 8, 5, 3];
print(A, B);
# skip checking if list A has elements more than list B
if len(A) > len(B):
is_subset = False;
else:
# complexity of sorting using quicksort or merge sort: O(n ln n)
# use best sorting algorithm available to minimize complexity
A.sort();
B.sort();
print(A, B);
# complexity: O(n^2)
# for a in A:
# if a not in B:
# is_subset = False;
# break;
# complexity: O(n)
is_found = False;
last_index_j = 0;
for i in range(len(A)):
for j in range(last_index_j, len(B)):
is_found = False;
print("i=" + str(i) + ", j=" + str(j) + ", " + str(A[i]) + "==" + str(B[j]) + "?");
if B[j] <= A[i]:
if A[i] == B[j]:
is_found = True;
last_index_j = j;
else:
is_found = False;
break;
if is_found:
print("Found: " + str(A[i]));
last_index_j = last_index_j + 1;
break;
else:
print("Not found: " + str(A[i]));
if is_found == False:
is_subset = False;
break;
print("subset") if is_subset else print("not subset");
আউটপুট
[9, 3, 11, 1, 7, 2] [11, 4, 6, 2, 15, 1, 9, 8, 5, 3]
[1, 2, 3, 7, 9, 11] [1, 2, 3, 4, 5, 6, 8, 9, 11, 15]
i=0, j=0, 1==1?
Found: 1
i=1, j=1, 2==1?
Not found: 2
i=1, j=2, 2==2?
Found: 2
i=2, j=3, 3==3?
Found: 3
i=3, j=4, 7==4?
Not found: 7
i=3, j=5, 7==5?
Not found: 7
i=3, j=6, 7==6?
Not found: 7
i=3, j=7, 7==8?
not subset