#java #time-complexity #big-o
Вопрос:
/*
Returns true is the two strings are permutations of each other.
Time Complexity; O(nlog n) -> because of the java utils array sort
Space Complexity; O(1)
*/
public boolean isPermutationOptimized(String one, String two) {
if (one.length() != two.length()) {
return false;
}
return sort(one).equals(sort(two));
}
public String sort(String s) {
char[] c = s.toCharArray();
java.util.Arrays.sort(c);
return new String(c);
}
Я считаю, что временная сложность равна O(nlogn) из-за сортировки массива java.utils, а сложность пространства постоянна.
Комментарии:
1. Сложность пространства неверна.
2. Если
one
бы иtwo
было по 10 МБ или 100 МБ каждый, сколько памяти потребовалось бы алгоритму? Какие строки в вашем фрагменте кода потребовали бы большого выделения места?3. Примечание
O(n)
. В этом случае вы также можете выполнить сортировку.4. Как я могу выполнить сортировку за O(n) время?
5. @DavisWard Сортировка по радиусу и сортировка по счету часто используются для сортировки строк и наборов небольших целых чисел. Это исключение из типичного
O(n log n)
ожидания сортировки, потому что вы можете просто посчитать/увеличить (O(1)) для каждого символа (O(n)) и воспроизвести его за время O(n k) сk
таким количеством сегментов (65536, для значений символов 65536).
Ответ №1:
Временная сложность составляет O(nlogn) как в среднем, так и в худшем случае. Пространственная сложность Timsort (используемый алгоритм сортировки) требует дополнительного пространства O(n): это не постоянная сложность, а линейная сложность. Некоторые ссылки: https://ericmervin.medium.com/what-is-timsort-76173b49bd16
Сложность вашего алгоритма равна сложности Timsort, потому что вы использовали этот алгоритм в два раза больше.