Pardon me if I am late to the party. ;)
To check if one set A is subset of set B, Python has A.issubset(B) and A <= B. It works on set only and works great BUT the complexity of internal implementation is unknown. Reference: https://docs.python.org/2/library/sets.html#set-objects
I came up with an algorithm to check if list A is a subset of list B with following remarks.
- To reduce complexity of finding subset, I find it appropriate to
sortboth lists first before comparing elements to qualify for
subset.
- It helped me to breaktheloopwhen value of element of second listB[j]is greater than value of element of first listA[i].
- last_index_jis used to start- loopover- list Bwhere it last left off. It helps avoid starting comparisons from the start of- list B(which is, as you might guess unnecessary, to start- list Bfrom- index 0in subsequent- iterations.)
- Complexity will be - O(n ln n)each for sorting both lists and- O(n)for checking for subset.
 - O(n ln n) + O(n ln n) + O(n) = O(n ln n).
 
- Code has lots of - printstatements to see what's going on at each- iterationof the- loop. These are meant for understanding
only.
 
Check if one list is subset of another list
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");
Output
[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