у меня есть этот класс:Найти связанный список группу внутри другой связанного список группы
public class IntNode {
private int _value;
private IntNode _next;
public IntNode(int val, IntNode n) {
_value = val;
_next = n;
}
public int getValue() {
return _value;
}
public IntNode getNext() {
return _next;
}
public void setValue(int v) {
_value = v;
}
public void setNext(IntNode node) {
_next = node;
}
}
и это:
public class IntList {
private IntNode _head;
public IntList() {
_head = null;
}
public IntList (IntNode node) {
_head = node;
}
. . . // methods
}
Этот список представляет целое число. в этом списке нет дублирующегося номера, каждый номер появляется только один раз.
Мне нужно добавить функцию public boolean isSubset (IntList other)
, которые возвращают true, если группа является подгруппой списка или false в противном случае. , например:
А = {1, 4, 2, 8}
В = [4, 8}
так A.isSubset(B)
возвращение истинного и B.isSubset(A)
возвращение ложным. Эта функция должна быть максимально эффективной.
Я знаю, что могу проверить каждое число из группы, получившуюся в качестве параметра, и найти этот номер внутри другого списка и снова проверить следующий номер и повторить цикл по всему списку, но это будет O (n²), чтобы он не будет настолько эффективным. может быть какое-то другое решение?
Сортировка связный список будет стоить NlogN, поэтому сортировать мои 2 списки будут стоить также NlogN, Binary стоимость Поиск LOGN так? в чем сложность всех? – user2908206
Средняя производительность быстрой сортировки - O (n log n). Таким образом, у вас будет производительность, чтобы отсортировать первый из ваших списков с помощью O (n log n). С бинарным поиском у вас есть средняя производительность с O (log n) для поиска элемента в списке. У вас есть m элементов во втором списке, так что у вас есть производительность m * O (log n). Я думаю, что это должен быть результат -> O (n1 log n1) + n2 * O (log n1) -> n1 = Количество элементов из первого списка; n2 = сумма, если элементы из второго списка. – Pastho