Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как считать O(n) сложнее чем O(n^2),O(n^3) / 25 сообщений из 31, страница 1 из 2
23.10.2018, 12:23
    #39721361
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
Мои знания ограничиваются тем, что один проход цикла это O(n), вложенный цикл это O(N^2) и так далее:

Но вот например merge sort:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public List<Integer> sort(List<Integer> list) {
   if (list.size() == 1) {
      return list;
   } else {
      List<Integer> leftPart = sort(list.subList(0, list.size() / 2));
      List<Integer> rightPart = sort(list.subList(list.size() / 2, list.size()));
      List<Integer> result = new ArrayList<>();
      for (int i = 0, k = 0; i + k < list.size(); ) {
         Integer leftMin = i < leftPart.size() ? leftPart.get(i) : null;
         Integer rightMin = k < rightPart.size() ? rightPart.get(k) : null;
         if (rightMin == null || (leftMin != null && leftMin < rightMin)) {
            result.add(leftMin);
            i++;
         } else {
            result.add(rightMin);
            k++;
         }
      }
      return result;
   }
}



Общеизвестно, что это O(nlogn)

n - видимо потому, что цикл. Логарифм не понимаю откуда берётся
...
Рейтинг: 0 / 0
23.10.2018, 12:25
    #39721362
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
questionerМои знания ограничиваются тем, что один проход цикла это O(n), вложенный цикл это O(N^2) и так далее:

Но вот например merge sort:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public List<Integer> sort(List<Integer> list) {
   if (list.size() == 1) {
      return list;
   } else {
      List<Integer> leftPart = sort(list.subList(0, list.size() / 2));
      List<Integer> rightPart = sort(list.subList(list.size() / 2, list.size()));
      List<Integer> result = new ArrayList<>();
      for (int i = 0, k = 0; i + k < list.size(); ) {
         Integer leftMin = i < leftPart.size() ? leftPart.get(i) : null;
         Integer rightMin = k < rightPart.size() ? rightPart.get(k) : null;
         if (rightMin == null || (leftMin != null && leftMin < rightMin)) {
            result.add(leftMin);
            i++;
         } else {
            result.add(rightMin);
            k++;
         }
      }
      return result;
   }
}



Общеизвестно, что это O(nlogn)

n - видимо потому, что цикл. Логарифм не понимаю откуда берётся

Потому, что рекурсивное дерево обходится?
...
Рейтинг: 0 / 0
23.10.2018, 12:41
    #39721381
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
логарифм берется когда внутри цикла может быть какое-то действие которое этот цикл может укоротить. в твоем случае i и k изменяются внутри цикла. следовательно сложность логарифмическая. не будь ее - была бы эн.

кстати, могу ошибаться но в о-нотации нлогн=логн фактически. и да, нкуб тоже нет. есть нквадрат. два вложенных там у тебя цикла или двадцать два -- это не важно уже.
...
Рейтинг: 0 / 0
23.10.2018, 12:42
    #39721382
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
O(Log n) - поиск деленеим попалам
...
Рейтинг: 0 / 0
23.10.2018, 12:44
    #39721383
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
есть хотя ВРОДЕ разные методы оценки комплексити я слышал про всякие вида O(a+bLogd+d2+n3) -- но по-моему меня просто на собеседовании обманули или сами дибилы верили в то что такое бывает )) Один мне доказывал что есть комплексити О(n*m) где n и m -- Это размеры каждого цикла из двух вложенных. понятия ворст кейс он по ходу тупо не знал.
...
Рейтинг: 0 / 0
23.10.2018, 12:46
    #39721385
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
O (омега большая) - как раз и означает ворст кейс.
...
Рейтинг: 0 / 0
23.10.2018, 12:48
    #39721387
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
HettO (омега большая) - как раз и означает ворст кейс.
у некоторых есть заблуждение что омега - это просто некая нотация описывающая сложность алгоритма.

кстати.. если уж к казуистике спускаемся. ворст кейс хашмапа -- не 1 а n но пишут то 1? или то речь всё же о мапе в идеальном сферическом случае?
...
Рейтинг: 0 / 0
23.10.2018, 12:52
    #39721391
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
Я там выше опечатался, где написал О назвал омегой. Там "О".

авторкстати.. если уж к казуистике спускаемся. ворст кейс хашмапа -- не 1 а n но пишут то 1? или то речь всё же о мапе в идеальном сферическом случае?
потому что в мапу если напихать объектов с одинаковым хешем, они поместятся в один кортеж (или как он там называется не помню),
после чего алгоритм будет перебирать весь этот кортеж в поисках нужного объекта по equals - отсюда и худьшее - O(n). Лучше - Ω(1).
ИМХО.
...
Рейтинг: 0 / 0
23.10.2018, 12:54
    #39721393
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
неее)) почему так происходит это я прекрасно знаю. я сказал это в контексте ворст кейса и описании комплексити. так, т.е. есть О нотация есть Омега нотация для хашмапа О нотация всё же не ворст кейс показывает?
...
Рейтинг: 0 / 0
23.10.2018, 12:55
    #39721395
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
На википендии написано что у хешмепа среднее - О(1), худьшее - О(n)
По поводу омеги, тетты и других букв, читал где-то давно в статье какой-то, но видимо мало кто использует эти буквы.
...
Рейтинг: 0 / 0
23.10.2018, 13:02
    #39721403
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
автор О нотация всё же не ворст кейс показывает

Русской версии википедии - получается что О - это именно худьшее.
https://ru.wikipedia.org/wiki/Вычислительная_сложность


В английской почему-то я не нашел дополнительных букв и там пишут просто best/average/worst case.
https://en.wikipedia.org/wiki/Computational_complexity_theory#Best,_worst_and_average_case_complexity
...
Рейтинг: 0 / 0
23.10.2018, 14:37
    #39721470
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
"О-большое" это не худшее и не лучшее.
Это "оценка по порядку величины".
...
Рейтинг: 0 / 0
23.10.2018, 15:59
    #39721524
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
andreykaTлогарифм берется когда внутри цикла может быть какое-то действие которое этот цикл может укоротить. в твоем случае i и k изменяются внутри цикла. следовательно сложность логарифмическая. не будь ее - была бы эн.

кстати, могу ошибаться но в о-нотации нлогн=логн фактически. и да, нкуб тоже нет. есть нквадрат. два вложенных там у тебя цикла или двадцать два -- это не важно уже.

Ну ты чего то совсем гонишь
...
Рейтинг: 0 / 0
23.10.2018, 18:16
    #39721611
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
questioner, вы уверены что правильно скопировали исходник?
...
Рейтинг: 0 / 0
23.10.2018, 18:31
    #39721624
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
maytonquestioner, вы уверены что правильно скопировали исходник?
Я не копировал - сам написал.

Пару кейсов прошло. А что накосячил где?
...
Рейтинг: 0 / 0
23.10.2018, 18:34
    #39721627
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
questionerandreykaTлогарифм берется когда внутри цикла может быть какое-то действие которое этот цикл может укоротить. в твоем случае i и k изменяются внутри цикла. следовательно сложность логарифмическая. не будь ее - была бы эн.

кстати, могу ошибаться но в о-нотации нлогн=логн фактически. и да, нкуб тоже нет. есть нквадрат. два вложенных там у тебя цикла или двадцать два -- это не важно уже.

Ну ты чего то совсем гонишь
конкретизируй предъявы.
...
Рейтинг: 0 / 0
23.10.2018, 18:39
    #39721628
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
andreykaTлогарифм берется когда внутри цикла может быть какое-то действие которое этот цикл может укоротить. в твоем случае i и k изменяются внутри цикла. следовательно сложность логарифмическая. не будь ее - была бы эн.

кстати, могу ошибаться но в о-нотации нлогн=логн фактически. и да, нкуб тоже нет. есть нквадрат. два вложенных там у тебя цикла или двадцать два -- это не важно уже.

Ну при insertion sort вложенный цикл уменьшается и всё равно n^2
...
Рейтинг: 0 / 0
23.10.2018, 18:39
    #39721629
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
код покажи
...
Рейтинг: 0 / 0
23.10.2018, 18:40
    #39721630
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
...посмотрел. там два вложенных цикла. где противоречие со сказанным мною??
...
Рейтинг: 0 / 0
23.10.2018, 18:41
    #39721631
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
andreykaTесть хотя ВРОДЕ разные методы оценки комплексити я слышал про всякие вида O(a+bLogd+d2+n3) -- но по-моему меня просто на собеседовании обманули или сами дибилы верили в то что такое бывает )) Один мне доказывал что есть комплексити О(n*m) где n и m -- Это размеры каждого цикла из двух вложенных. понятия ворст кейс он по ходу тупо не знал.

Вообще-то может. вот пример O(n+m) - https://ru.wikipedia.org/wiki/Сортировка_подсчётом
...
Рейтинг: 0 / 0
23.10.2018, 18:42
    #39721632
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
andreykaT...посмотрел. там два вложенных цикла. где противоречие со сказанным мною??

andreykaT логарифм берется когда внутри цикла может быть какое-то действие которое этот цикл может укоротить.
...
Рейтинг: 0 / 0
23.10.2018, 18:51
    #39721635
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
questionerandreykaTесть хотя ВРОДЕ разные методы оценки комплексити я слышал про всякие вида O(a+bLogd+d2+n3) -- но по-моему меня просто на собеседовании обманули или сами дибилы верили в то что такое бывает )) Один мне доказывал что есть комплексити О(n*m) где n и m -- Это размеры каждого цикла из двух вложенных. понятия ворст кейс он по ходу тупо не знал.

Вообще-то может. вот пример O(n+m) - https://ru.wikipedia.org/wiki/Сортировка_подсчётом
ты хоть читаешь то что сюда линками выкладываешь? где ты там О нотацию вообще увидел?
...
Рейтинг: 0 / 0
23.10.2018, 18:57
    #39721637
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
andreykaTquestionerпропущено...


Вообще-то может. вот пример O(n+m) - https://ru.wikipedia.org/wiki/Сортировка_подсчётом
ты хоть читаешь то что сюда линками выкладываешь? где ты там О нотацию вообще увидел?

https://en.wikipedia.org/wiki/Counting_sort Therefore, the time for the whole algorithm is the sum of the times for these steps, O(n + k).
...
Рейтинг: 0 / 0
23.10.2018, 18:59
    #39721639
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
questionermaytonquestioner, вы уверены что правильно скопировали исходник?
Я не копировал - сам написал.

Пару кейсов прошло. А что накосячил где?
Я не говорил что ты накосячил.

Главная задача которая ставилась теоретиками перед merge sort - это сортировка последовательных данных. Лент. Дисковых файлов. Причем - многократно превышающих доступную память.

У тебя эти фичи не показаны. И не продемонстрирована работа со стримами.

Кроме того имеют место различные операции с массивами. Я бы их попробовал избежать.
...
Рейтинг: 0 / 0
23.10.2018, 19:02
    #39721641
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как считать O(n) сложнее чем O(n^2),O(n^3)
questionerandreykaTпропущено...

ты хоть читаешь то что сюда линками выкладываешь? где ты там О нотацию вообще увидел?

https://en.wikipedia.org/wiki/Counting_sort Therefore, the time for the whole algorithm is the sum of the times for these steps, O(n + k).
у тебя в двух линках написано по-разному. мне какой больше верить?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как считать O(n) сложнее чем O(n^2),O(n^3) / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]