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++ {
...
В целом - это не самое сложное вычисление, но в контексте этой задачи может быть весомым и оно является частью самого тяжелого куска (который вы и оптимизируете).
Добавлю, что в подобных исследованиях стараются между измерениями делать одно изменение за раз, иначе сложно понять, что именно привело к улучшению алгоритма.
Идеальная алгоритмическая секция на Golang (ИМХО)