Search
Write a publication
Pull to refresh

Comments 3

Вроде и резюме, и опыт релевантный, а задачу дали абсурдную, которую на проекте никогда решать не придется.

Итак, сегодня мы попробуем совместно пройти идеальный АлгоСобес. У нас сегодня будет:

поиск простых чисел!

У нас кадровик как анекдот рассказывала про одно собеседование. Пришел претендент и чем-то он сильно не понравился, решили его намеренно завалить - дали сложные алгоритмические задачи. Чувак раз и решил, давайте говорит ещё - дали. Он бац и опять шустро решил. Ему пытаются как-то отказать в стиле "мы вам перезвоним". Претендент отвечает: что я к вам на работу устраиваться что ли пришел? Мне сказали у вас крутые, интересные, а главное свежие задачи. Мне как раз для сайта нужны. Давайте все что у вас есть.

Мне кажется, что переход на "GOрутинный (или многопоточный) способ решения" не совсем корректен:

Кроме перехода на много поточность, вы заменяете постоянное (на каждом проходе цикла) умножение p*p на разовое вычисление uint64(math.Sqrt(float64(max))).

Было:
...
for p := uint64(2); p*p <= max; p++ {
...

Стало:
...
sqrtMax := uint64(math.Sqrt(float64(max)))
for p := uint64(2); p <= sqrtMax; p++ {
...

В целом - это не самое сложное вычисление, но в контексте этой задачи может быть весомым и оно является частью самого тяжелого куска (который вы и оптимизируете).

Добавлю, что в подобных исследованиях стараются между измерениями делать одно изменение за раз, иначе сложно понять, что именно привело к улучшению алгоритма.

Sign up to leave a comment.

Articles