Re[7]: Кстати, про Гугель
От: ylp  
Дата: 06.11.18 03:56
Оценка: 15 (1) +1 -1 :)
Здравствуйте, CoderMonkey, Вы писали:

CM>2. Отсортировать массив, не сравнив каждый элемент с каким-либо другим как минимум раз — невозможно.

Люди, писавшие сортировку подсчетом, смотрят на вас с недоумением
Re[9]: Кстати, про Гугель
От: ylp  
Дата: 06.11.18 04:03
Оценка: -2 :)
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, ylp, Вы писали:


ylp>>о, пошли философские разговоры. Люблю такое. Что такое "О-фактор", расскажИте? А то у меня тут общепринятое понимание — оно про время выполнения и про дополнительную память


CM>Общепринятое понимание — про число операций и память.

Серьезно?

У вас серьезные проблемы с пониманием big-O notation. Раз вам так нравится, я еще раз дам ссылку на википедию и цитату оттуда.
https://en.wikipedia.org/wiki/Time_complexity

Since this function is generally difficult to compute exactly, and the running time for small inputs is usually not consequential, one commonly focuses on the behavior of the complexity when the input size increases—that is, the asymptotic behavior of the complexity. Therefore, the time complexity is commonly expressed using big O notation, typically {\displaystyle O(n),} O(n), {\displaystyle O(n\log n),} {\displaystyle O(n\log n),} {\displaystyle O(n^{\alpha }),} {\displaystyle O(n^{\alpha }),} {\displaystyle O(2^{n}),} {\displaystyle O(2^{n}),} etc., where n is the input size in units of bits needed to represent the input.



ylp>>гениально, браво, спасибо. КО! Если сравнивать элементы массива не по два за один шаг алгоритма, а параллельно группами, можно успеть сделать сравнения быстрее, улавливаете?


CM>И вместо C1 * O(N) ты получишь C2 * O(N), где C2 < C1

CM>Улавливаешь?
Я вижу, что no hire на скринге сделан был совершенно обосновано. Плавать в таких вещах как вычислительная сложность алгоритмов и упорно продолжать при этом спорить, когда перед глазами есть весь интернет — это весьма сильно.

ylp>>я смотрю, вам нравится выставлять себя идиотом. продолжим: https://en.wikipedia.org/wiki/Batcher_odd%E2%80%93even_mergesort

CM>Объясняю на пальцах, для самых тупых. Бесконечно больших сортирующих сетей — не бывает.
Radix sort сортирует только числа небесконечной разрядности.
Деда Мороза не существует. Вам напомнить, с чего начался наш разговор?
Re[10]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 04:15
Оценка: :)
Здравствуйте, ylp, Вы писали:

ylp>У вас серьезные проблемы с пониманием big-O notation. Раз вам так нравится, я еще раз дам ссылку на википедию и цитату оттуда.


Та же википедия:

Mathematical analysis of quicksort shows that, on average, the algorithm takes O(n log n) comparisons to sort n items.

Обращаю внимание, для однопоточного выполнения, число операций = время. Однако, если для однопоточных алгоритмов обычно фигурирует time или operations, то для параллельных — parallel time.
Сравниваем метры с килограммами, ага?

CM>>И вместо C1 * O(N) ты получишь C2 * O(N), где C2 < C1

ylp>Я вижу, что no hire на скринге сделан был совершенно обосновано. Плавать в таких вещах как вычислительная сложность алгоритмов и упорно продолжать при этом спорить, когда перед глазами есть весь интернет — это весьма сильно.

Оспорить утверждение выше ты в состоянии?

ylp>Radix sort сортирует только числа небесконечной разрядности.

ylp>Деда Мороза не существует. Вам напомнить, с чего начался наш разговор?

Значит, не дошло. Объясняю еще более на пальцах. Чем больший массив тебе нужно отсортировать, тем больше растет размер сортирующей сети, который для этого нужен. Причем растет быстро. И это значит, что очень быстро ты упрешься в потолок, выше которого поднять размер сети просто невозможно, и тебе придется разбивать массив на части, сортировать их по отдельности, а потом делать слияние. И вот последний необходимый шаг требует O(N) и никак не быстрее.
Достаточно доступно, или нужно объяснить еще подробнее?
Re[8]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 04:16
Оценка:
Здравствуйте, ylp, Вы писали:

ylp>Люди, писавшие сортировку подсчетом, смотрят на вас с недоумением


"Сортировку" подсчетом.
Так будет точнее.
Re: Кстати, про Гугель
От: white_znake  
Дата: 06.11.18 08:44
Оценка: :)
Здравствуйте, CoderMonkey, Вы писали:

CM>Имел собеседование со "специалистом" из Гугла. На вопрос "какова лучшая сложность для алгоритмов сортировки", ответил ему, что O(n). Нет, говорит, это неправильно — должно быть O(n * log n). Правильно, говорю, именно O(n). Есть такой radix sort, у него сложность именно такая. В ответ — недоуменно-возмущенное молчание. Похоже, не поверил.

CM>Кажется, никакое продолжение мне не светит :))

Гугл — есть гугл. Компания крутая, как по продуктам, так и по ЗП. Поэтому они отбирают лучших.
Ну как бы Radix Sort работает только для целых положительных чисел. Поэтому надо было либо уточнить вопрос: А какие данные сортировать хотите? А если уж хотел сверкнуть знаниями, то так и надо было говорить: radix sort для uint c O(n), quick sort & merge sort с O(n * log n).
Re[2]: Кстати, про Гугель
От: Тёмчик Австралия жж
Дата: 06.11.18 10:08
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Ну как бы Radix Sort работает только для целых положительных чисел.

http://rsdn.org/forum/job/7291127.1
Автор: CoderMonkey
Дата: 06.11.18
Re[2]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 16:33
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Ну как бы Radix Sort работает только для целых положительных чисел.


Тут есть такой нюанс — на компьютере, абсолютно любые данные представляют собой набор байтов. То есть — положительных целых чисел. Странно, что так много программистов этого не понимают.
Re[3]: Кстати, про Гугель
От: B0FEE664  
Дата: 06.11.18 16:44
Оценка: +1
Здравствуйте, CoderMonkey, Вы писали:

_>>Ну как бы Radix Sort работает только для целых положительных чисел.

CM>Тут есть такой нюанс — на компьютере, абсолютно любые данные представляют собой набор байтов. То есть — положительных целых чисел. Странно, что так много программистов этого не понимают.

Но порядок сортировки может не соответствовать порядку битового представления.
И каждый день — без права на ошибку...
Re: Кстати, про Гугель
От: σ  
Дата: 06.11.18 16:48
Оценка:
Всё зависит от входных данных и используемых в алгоритме операций

Например, если известно, что входные данные всегда отсортированы, то сложность сортировки O(1).
Re[9]: Кстати, про Гугель
От: ylp  
Дата: 06.11.18 16:54
Оценка: :)
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, ylp, Вы писали:


ylp>>Люди, писавшие сортировку подсчетом, смотрят на вас с недоумением


CM>"Сортировку" подсчетом.

CM>Так будет точнее.
Облажался — прикинься философом, ага.
Re[4]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 17:01
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Но порядок сортировки может не соответствовать порядку битового представления.


Данные можешь представить алгоритму в любой форме, которая тебе нужна. Не намного сложнее, чем написать компаратор для классов (хотя, конечно, и с этим многие не справляются)
int GetDigit(SomeClass field, int index)
{
    if (blahblahblah)
        return something;
    // ......
}
Re[10]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 17:02
Оценка: :)
Здравствуйте, ylp, Вы писали:

ylp>Облажался — прикинься философом, ага.


Ага, это ты умеешь. Отсортируй ка мне массив объектов подсчетом.
Re[11]: Кстати, про Гугель
От: ylp  
Дата: 06.11.18 17:07
Оценка: :)
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, ylp, Вы писали:


ylp>>Облажался — прикинься философом, ага.


CM>Ага, это ты умеешь. Отсортируй ка мне массив объектов подсчетом.

Ой, баоюс-баюс!

Отсортируйте-ка мне массив объектов радикс сортом, который по вашим же словам "radix sort прекрасно применим в любых случаях, где применим любой другой алгоритм сортировки.
Автор: CoderMonkey
Дата: 06.11.18
".
Re[11]: Кстати, про Гугель
От: ylp  
Дата: 06.11.18 17:08
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, ylp, Вы писали:


ylp>>У вас серьезные проблемы с пониманием big-O notation. Раз вам так нравится, я еще раз дам ссылку на википедию и цитату оттуда.


CM>Обращаю внимание, для однопоточного выполнения, число операций = время.

Число операций не = время, а пропорционально времени. И да, спасибо, КО!
> Однако, если для однопоточных алгоритмов обычно фигурирует time или operations, то для параллельных — parallel time.
CM>Сравниваем метры с килограммами, ага?
Сравнивается время выполнения одних алгоритмов со временем выполнения других алгоритмов. В случае с последовательными алгоритмов время пропорционально числу операций, в случае паралельных — нет. Big-O notation как мы уже выяснили, она про время, а не про число операций.

CM>>>И вместо C1 * O(N) ты получишь C2 * O(N), где C2 < C1

ylp>>Я вижу, что no hire на скринге сделан был совершенно обосновано. Плавать в таких вещах как вычислительная сложность алгоритмов и упорно продолжать при этом спорить, когда перед глазами есть весь интернет — это весьма сильно.
CM>Оспорить утверждение выше ты в состоянии?
Зачем оспаривать бред людей, которые базовых вещей не понимают. Это скучно. Интереснее вас просто троллить.

ylp>>Radix sort сортирует только числа небесконечной разрядности.

ylp>>Деда Мороза не существует. Вам напомнить, с чего начался наш разговор?

CM>Значит, не дошло. Объясняю еще более на пальцах. Чем больший массив тебе нужно отсортировать, тем больше растет размер сортирующей сети, который для этого нужен.

Офигеть, продолжайте.

>Причем растет быстро.

Круто!

>И это значит, что очень быстро ты упрешься в потолок

Нифига себе! Потолок чего?

> выше которого поднять размер сети просто невозможно, и тебе придется разбивать массив на части

Не, уже скучно, повторяетесь.

CM>Достаточно доступно, или нужно объяснить еще подробнее?

Не, не нужно. пойдите в википедию и почитайте, чему пропорционален размер сортирующей сети, которая сортирует массив длины N за O(log^2(N)).
Давайте я, как обычно, вам помогу найти нужное место в тексте, которое вы не видите:

https://en.wikipedia.org/wiki/Batcher_odd%E2%80%93even_mergesort

Batcher's odd–even mergesort is a generic construction devised by Ken Batcher for sorting networks of size O(n (log n)2) and depth O((log n)2),


Повторяю для особо одаренных: размер сортирующей сети пропорционален n*log^2(n).

"Растет быстро!"
"Очень быстрно упрешся в потолок".
Детский сад, одним словом. Но пока весело.

Так вам напомнить с чего наш разговор-то начался? Про то "какова лучшая сложность алгоритмов сортировки"
Re[5]: Кстати, про Гугель
От: B0FEE664  
Дата: 06.11.18 17:10
Оценка:
Здравствуйте, CoderMonkey, Вы писали:

BFE>>Но порядок сортировки может не соответствовать порядку битового представления.

CM>Данные можешь представить алгоритму в любой форме, которая тебе нужна. Не намного сложнее, чем написать компаратор для классов (хотя, конечно, и с этим многие не справляются)

Не намного сложнее? Напишите для строк неизвестной длины.
И каждый день — без права на ошибку...
Re[12]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 17:28
Оценка:
Здравствуйте, ylp, Вы писали:

ylp>Отсортируйте-ка мне массив объектов радикс сортом, который по вашим же словам "radix sort прекрасно применим в любых случаях, где применим любой другой алгоритм сортировки.
Автор: CoderMonkey
Дата: 06.11.18
".


http://rsdn.org/forum/job/7291866.1
Автор: CoderMonkey
Дата: 06.11.18

Разжевывать нужно?
Re[13]: Кстати, про Гугель
От: ylp  
Дата: 06.11.18 17:37
Оценка: :)
Здравствуйте, CoderMonkey, Вы писали:

CM>Здравствуйте, ylp, Вы писали:


ylp>>Отсортируйте-ка мне массив объектов радикс сортом, который по вашим же словам "radix sort прекрасно применим в любых случаях, где применим любой другой алгоритм сортировки.
Автор: CoderMonkey
Дата: 06.11.18
".


CM>http://rsdn.org/forum/job/7291866.1
Автор: CoderMonkey
Дата: 06.11.18

CM>Разжевывать нужно?

Ага.
Задание для не совсем тупых: оценить количество операций сравнения символов в алгоритме, который указаным вами способом сортирует массив строк, длина каждой из которой равна размеру массива. Сравнить с квиксортом, много думать (надуюсь, у вас получится!).
Re[12]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 17:37
Оценка: +2
Здравствуйте, ylp, Вы писали:

ylp>Big-O notation как мы уже выяснили, она про время, а не про число операций.


Тебе никогда не приходило в голову — а почему в Big-O notation фигурирует название сложность алгоритма, а не "скорость" или "время выполнения"?

CM>>>>И вместо C1 * O(N) ты получишь C2 * O(N), где C2 < C1

ylp>Зачем оспаривать бред людей, которые базовых вещей не понимают. Это скучно. Интереснее вас просто троллить.

Еще раз. Ты в состоянии оспорить утверждение выше, или будешь и дальше устраивать истерику?

ylp>Повторяю для особо одаренных: размер сортирующей сети пропорционален n*log^2(n).


А теперь посчитай, какой размер сети тебе понадобится для массива в, хотя бы, 1 миллион элементов. Я уверен, ты сможешь справиться с этой не слишком сложной математикой.
Re[6]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 17:39
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Не намного сложнее? Напишите для строк неизвестной длины.


Легко. И, кстати, реально написал в одном из старых проектов.
Сумеешь сообразить сам или надо разжевать?
Re[14]: Кстати, про Гугель
От: CoderMonkey  
Дата: 06.11.18 17:41
Оценка:
Здравствуйте, ylp, Вы писали:

ylp>Ага.

ylp>Задание для не совсем тупых: оценить количество операций сравнения символов в алгоритме, который указаным вами способом сортирует массив строк, длина каждой из которой равна размеру массива. Сравнить с квиксортом, много думать (надуюсь, у вас получится!).

Даю намек. Попробуй оценить количество операций сравнения символов в алгоритме QuickSort, который сортирует массив строк, длина каждой из которой равна размеру массива.
Это совсем не сложно, должно получиться даже у тебя.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.