পার্টিতে দেরি হলে আমাকে ক্ষমা করুন। ;)
যদি এক পরীক্ষা করার জন্য 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
জন্য যোগ্যতার সাথে উপাদানগুলির তুলনা করার আগে আমি উভয় তালিকার পক্ষে এটি উপযুক্ত মনে করি
।
- এটা আমার কাছে সাহায্য করেছিল যখন দ্বিতীয় তালিকার উপাদান এর মান প্রথম তালিকার উপাদান এর মান চেয়ে বেশী ।
break
loop
B[j]
A[i]
last_index_j
শুরু করার জন্য ব্যবহার করা হয় loop
বেশি list B
যেখানে গত শেষ করেছিলেন। এটি শুরু থেকে তুলনা শুরু করা এড়াতে সহায়তা করে
list B
( এটি পরবর্তীকালে list B
থেকে শুরু করার জন্য, যা আপনি অপ্রয়োজনীয় অনুমান করতে পারেন ))index 0
iterations
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