Для домашнего задания меня попросят отсортировать массив bools с использованием метода, который использует O (1) пространство и O (N) временную сложность. Могут ли предлагаться какие-либо подсказки? Я думал о чем-то по сводному методу алгоритма быстрой сортировки. -Спасибо!Сортировка booleans, O (N) time, O (1) space
ответ
- Держите указатель спереди и сзади.
- проверить текущий передний индекс, если это ложный увеличиваем передний индекс
- , если это правда своп с индексом обратно и уменьшает индекс назад
- продолжить с шагами 2 и 3 до передних и задних индексов равны другие
действительный, эффективный, но более простой, чем простой подсчет, а затем назначает подход – RichardPlunkett
@RichardPlunkett это практически то же самое, что и раздел в qsort, если вы не можете указать, что вы не должны быть программистом, также он делает только один проход – aaronman
Если у вас есть массив булевых, вы можете просто считать (ложные или ) значений верно. Предположим, что этот результат равен k. Затем вы устанавливаете первые k элементов массива на true, а остальные false.
Этот алгоритм перебирает массив в два раза (так что имеет временную сложность O (N)), и использует только один счетчик, поэтому пространство требуется O (1).
Поскольку логические значения имеют только два возможных значения, вы можете просто подсчитать «истинные» и «ложные» s и изменить исходный массив на месте, чтобы сначала вы поместили в него соответствующее количество значений false
, затем заполните остальные true
. Это O(n)
во времени и O(1)
в космосе, если требуется. код C следующим образом:
void sortbool(int *b, size_t n)
{
size_t k = 0;
for (size_t i = 0; i < n; i++) {
if (!b[i])
k++;
}
for (size_t i = 0; i < n; i++) {
b[i] = !(i < k);
}
}
- 1. clojure subvec O (n) вместо O (1)?
- 2. Выбор O (n) над O (1), когда для всех n, O (1) быстрее, чем O (n)?
- 3. Большой O-O (N^2) или O (N^2 + 1)?
- 4. Это O (n^2) или O (1)?
- 5. Перемещение бит O (1) или O (n)?
- 6. Сложность Время O (n) или O (n (n + 1)/2)
- 7. Сумма порядка O (1) + O (2) + .... + O (n)
- 8. Сортировка в O (N) пересекаются
- 9. Практическое различие между O (n) и O (1 + n)?
- 10. ListBox.FindString, что является наихудшим временем выполнения? O (n), O (n log n), O (1)?
- 11. Примеры алгоритмов, которые имеют O (1), O (n log n) и O (log n) сложности
- 12. Java Time Complexity O (n^2/3)
- 13. Почему сортировка строки O (n log n)?
- 14. Сортировка связанного списка в O (n log n) с сложностью пространства O (1)
- 15. Queue <T> O (1) time
- 16. Вычисление ноты Not-O, O (n) * O (log n) = O (n log n)
- 17. Как может быть алгоритм O (n) также O (n^2), O (n^1000000), O (2^n)?
- 18. O (log_2 (n)) = O (log_10 (n))?
- 19. Алгоритм вычисления TripleSum O (n) time, Java
- 20. Как сделать время выполнения O (N) от O (N^2)
- 21. Big O: O (n) compareStrings
- 22. Между O (nlog * n) и O (n)?
- 23. Не следует вставлять только O (n) не O (1) или O (n) вставлять в несвязанный список?
- 24. C++ Разбиение списка в O (n) вместо O (1)
- 25. Который больше: O (n * logn) или O (1)?
- 26. На практике добавляется связанный список O (N) или O (1)?
- 27. Что это означает: шаги O (n) и O (1)?
- 28. циклической перестановкой в O (1) пространство и O (N) времени
- 29. Улучшение движения деления от O (n) до O (1)
- 30. Сборники Java: TreeMap.size() и TreeSet.size(): O (1) или O (n)?
Подсказка: поиск «ведро рода» – doynax
Ваша мысль о методе поворота в основном способ сделать это – aaronman
Мысль о том, что, хотя блочная сортировка будет использовать O (N) пространства – bensherms