Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, Sharowarsheg, Вы писали:
S>>И будет классно, когда окажется, что в практических данных 99% случаев в парах одинаковые числа. Пишите лучше сразу hash = 1, потом профайлер разберется, где сгодится, а где исправить.
ПМ>Ну это вообще цикр.
Ничего, со временем приходит понимание разнообразности данных. Если есть выбор, писать hash = md5(...) или hash = 1, второй вариант лучше. В условии "надо сделать хеш из двух uint32" выбирать промежуточный вариант оснований нет.
Здравствуйте, __lambda__, Вы писали:
___>Просыпайся, сонный программист ___>Рихтер для .NET программиста библия. Да и для Win32 программиста тоже. Хвастаться знанием чего-либо, я понимаю... А вот хвастаться тем, что не читал одну из самых лучших книг, одного из самых лучших авторов...
Нету библии. Наверняка те же самые вопросы разжёваны в массе других книжек. И авторов лучших тоже каждый второй, вот например если с одной стороны Рихтер, а с другой Руссинович и Соломон, кто кого заборет? Если для Win32 программиста и Питрека не читать?
ПМ>А потом эти недоджуниоры уже в /job/ не могут написать алгоритм разворота списка без ошибок и щеголяют своим незнанием примитивов синхронизации. У меня альтернативное предположение — высокая зарплата (более 80 тысяч) привлекает слишком много 35-летних бездельников, которые просиживали штаны в своих конторах, а теперь вдруг увидели возможность получать больше денег и решили, а вдруг прокатит. Думаю, что назначать зарплату выше рыночной — серьёзная ошибка, мотивировать людей надо другими способами.
О, спасибо за подтверждение моих подозрений.
А вы пока продолжайте искать бриллианты в навозе. Вам обязательно встретится кандидат на 80 тыс. руб. в месяц, который всенепременно будет знать про "монитор", будет разворачивать списки и каждодневно освежать свои знания о nested data parallelism.
PS: вы так и не назвали ни одного проекта, над которыми вы работали. Интересно же посмотреть, где надо столько всего сурового знать _заранее_ — и без возможности подучиться на ходу, въезжая в проект.
подойдёт? Если нет, то чем плохо, какой вариант предлагается и чем он лучше в данной формулировке (без описания типичных значений этих int32)/
Если распределение исходных данных неизвестно, пойдет что угодно. Хоть a*b, или, для лучшего перемешивания, a & 0xFFFF * b >> 16 + a >> 16 * b & 0xFFFF
Здравствуйте, Паблик Морозов, Вы писали:
S>>И будет классно, когда окажется, что в практических данных 99% случаев в парах одинаковые числа. Пишите лучше сразу hash = 1, потом профайлер разберется, где сгодится, а где исправить.
ПМ>Ну это вообще цикр.
Цикр — это вопрос в стиле "32-битный хеш от двух 32-битных чисел".
Зачем тебе такой красивый хеш с таким красивым количеством коллизий нужен? Что хочешь сделать? Поиск типа быстрый замутить или чего еще?
Здравствуйте, Паблик Морозов, Вы писали:
ПМ>Здравствуйте, alzt, Вы писали:
A>>Большинство программистов отличат O(N) и O(1000N), хотя разница и невелика.
ПМ>Для того, чтобы отличить O(N) от O(1000N) надо
Здравствуйте, landerhigh, Вы писали:
A>>>Большинство программистов отличат O(N) и O(1000N), хотя разница и невелика.
ПМ>>Для того, чтобы отличить O(N) от O(1000N) надо
L>
Зря ты, кстати. Практически иногда оказывается, что в O(k*n) слишком большое k. Представь себе, что у тебя что-то такое, что нужно неделю считать. Сразу начнешь различать O(n) и O(10*n).
Здравствуйте, SkyDance, Вы писали:
SD>PS: но я вот сейчас вспоминаю, что большинство тех, кто шел в аспирантуру были в основном бездельниками и лопухами. Москвичками. Кому аспирантура была нужна для откоса от армии.
SD>>PS: но я вот сейчас вспоминаю, что большинство тех, кто шел в аспирантуру были в основном бездельниками и лопухами. Москвичками. Кому аспирантура была нужна для откоса от армии. P>
Сложности с пониманием? Или с русским языком? Какие есть варианты интерпретации выделенного?
Здравствуйте, Sharowarsheg, Вы писали:
S>Зря ты, кстати. Практически иногда оказывается, что в O(k*n) слишком большое k. Представь себе, что у тебя что-то такое, что нужно неделю считать. Сразу начнешь различать O(n) и O(10*n).
Так он прав. O(k*n) где k — константа и O(n) — это одно и то же в силу определения O! O-нотация — это грубая оценка ассимптотики функции, возможность выбрать две (для О-большое) положительные константы, таких, что время выполнения T(n) находится в заданном диапазоне (c1*n <= T(n) <= c2*n). Вот и получается, что на практике оценки вроде O не нужны! Нужна другая оценка. Более точная. Учитывающая те самые константы. Назовем ее Estf(n), например. Тогда нас будет интересовать такое приближение, когда |(T(n) — Estf(n))/T(n)| (относительная погрешность) стремится к нулю. Тогда Est(n) и Est(10*n) будут отличаться.
Попытки внести в O не ассимптотику, а само измерение сложности — это и есть непонимание O-нотации. Да, на практике нужны более точные оценки. Ну так и нужно придумать для них другие обозначения, а не вводить всех в заблуждение. А ведь Паблик еще и других собеседует со своим неверным пониманием .
Здравствуйте, SkyDance, Вы писали:
SD>>>PS: но я вот сейчас вспоминаю, что большинство тех, кто шел в аспирантуру были в основном бездельниками и лопухами. Москвичками. Кому аспирантура была нужна для откоса от армии. P>>
SD>Сложности с пониманием? Или с русским языком? Какие есть варианты интерпретации выделенного?
В русском языке, написанные тобой три предложения интерпретируются однозначно: в аспирантуру шли в основном бездельники-москвички, которым аспирантура была нужна для откоса от армии.
Так что учись писать по-русски, это не сложно.
Здравствуйте, SkyDance, Вы писали:
SD>>>PS: но я вот сейчас вспоминаю, что большинство тех, кто шел в аспирантуру были в основном бездельниками и лопухами. Москвичками. Кому аспирантура была нужна для откоса от армии. P>> SD>Сложности с пониманием? Или с русским языком? Какие есть варианты интерпретации выделенного?
Хм, и давно это Москва переехала в Израиль? Да и девушке в Израиле вроде не косят от армии...
On 05.03.2012 22:37, Паблик Морозов wrote:
> ПМ>> зависимость времени обработки от количества данных надо хотя бы > приблизительно уметь оценивать. > BFE>Не верю. > BFE>Где, когда и зачем это знание было применено на практике? > > Один из первых вопросов, которые задаёт клиент — это "а какие системные > требования"? (как варианты — "а за сколько обработается наша клиентская > база?" "сколько времени будут импортироваться документы?" и всё в таком > духе)
Хм. Вы не обижайтесь, пожалуйста, но вас всё сложнее воспринимать как
адекватного собеседника.
Абсолютно ничего, практически пригодного к использованию, теоретическими
расчётами на основании "O()" и т.п. вы здесь не получите.
ПМ>Мне пофиг на анекдоты, человек или знает, что такое монитор, или нет. А стыдятся и краснёют пусть гимназистки всякие.
Логично. Но не факт, что знание этого термина как-то коррелирует с навыками разработки многопоточных систем. Я вот уже больше десяти лет такие системы разрабатываю, и в принципе неплохо разбираюсь в многопоточности. Указанную статью в википедии вижу первый раз в жизни, описание этого крайне мутное и непонятное. Обычный класс, методы которого защищены мьютексами? Это "thread safe class", или, по-русски, потокобезопасный класс. Зачем лишнее название городить? При чем здесь "монитор" — он что, мониторит что-то? Какие-то чудовищные огороды с нотификациями и ожиданиями — это все отдельные мелкие концепции, зачем весь этот винегред в одном месте?
Да, я делал такие штуки в коде, и не раз. Но придумывать для них отдельное название а потом спрашивать его на собеседовании... O_O.
Здравствуйте, Sharowarsheg, Вы писали:
ПМ>>>Для того, чтобы отличить O(N) от O(1000N) надо
L>>
S>Зря ты, кстати. Практически иногда оказывается, что в O(k*n) слишком большое k. Представь себе, что у тебя что-то такое, что нужно неделю считать. Сразу начнешь различать O(n) и O(10*n).
Давайте только отделять зерна от плевел. В рамках оценки временнОй сложности алгоритма с помощью O-нотации O(n) = O(k*n) по определению.
Другое дело, когда нужно оценивать абсолютную сложность конкретной реализации. Тут и алгоритм с O(n^2) может оказаться быстрее O(1) за счет накладных расходов. Но O-нотацию для таких оценок применять уже не стоит.
Здравствуйте, landerhigh, Вы писали:
A>>>Большинство программистов отличат O(N) и O(1000N), хотя разница и невелика.
ПМ>>Для того, чтобы отличить O(N) от O(1000N) надо
L>
Это всё в контексте
М.. нет. Разве что свою систему изобрести, но скорее всего получится то же О.
. Для О это может быть и несущественно, но вообще на практике тоже надо учитывать. Особенно, когда на практике N не очень большое, а контанта оказывается значительной.
подойдёт? Если нет, то чем плохо, какой вариант предлагается и чем он лучше в данной формулировке (без описания типичных значений этих int32)/
SD>Если распределение исходных данных неизвестно, пойдет что угодно. Хоть a*b, или, для лучшего перемешивания, a & 0xFFFF * b >> 16 + a >> 16 * b & 0xFFFF
Кстати, да. Может оказаться, что b как-то зависит от a, и в итоге получим аналог hashCode() {return 7;}.
Здравствуйте, landerhigh, Вы писали:
L>Другое дело, когда нужно оценивать абсолютную сложность конкретной реализации. Тут и алгоритм с O(n^2) может оказаться быстрее O(1) за счет накладных расходов. Но O-нотацию для таких оценок применять уже не стоит.
Понятно, но поскольку другой нотации особо не завезли, регулярно пишут (и я в том числе) O(f(n)) вместо t=f(n). И смотрите, если вы начнете настаивать на правильном использовании O-нотации, опаненты начнут настаивать на правильном использовании термина "монитор"