вгоняет в депрессию
От: Codealot Земля  
Дата: 12.11.24 00:05
Оценка: :))) :))) :)))
https://stackoverflow.com/questions/13755007/c-sharp-find-highest-array-value-and-index

 int maxValue = anArray.Max();
 int maxIndex = anArray.ToList().IndexOf(maxValue);


198 плюсов!
Ох ты ж б*я с*а е*й п*ц.

Ну и в качестве вишенки на торте:

Director/CTO at TensorStack Ltd.

Ад пуст, все бесы здесь.
Отредактировано 12.11.2024 0:06 Codealot . Предыдущая версия .
Re: вгоняет в депрессию
От: LaptevVV Россия  
Дата: 12.11.24 03:44
Оценка: -1
C>https://stackoverflow.com/questions/13755007/c-sharp-find-highest-array-value-and-index
C>
C> int maxValue = anArray.Max();
C> int maxIndex = anArray.ToList().IndexOf(maxValue);
C>

C>198 плюсов!
C>Ох ты ж б*я с*а е*й п*ц.
А чего вгоняет-то ?
Уровень вопроса или уровень ответа ?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: вгоняет в депрессию
От: Codealot Земля  
Дата: 12.11.24 06:15
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Уровень вопроса или уровень ответа ?


Главным образом — ответа.
А это не очевидно?
Ад пуст, все бесы здесь.
Отредактировано 12.11.2024 6:16 Codealot . Предыдущая версия .
Re: вгоняет в депрессию
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.11.24 07:57
Оценка: -1 :)
Здравствуйте, Codealot, Вы писали:

C>https://stackoverflow.com/questions/13755007/c-sharp-find-highest-array-value-and-index


C>
C> int maxValue = anArray.Max();
C> int maxIndex = anArray.ToList().IndexOf(maxValue);
C>


C>198 плюсов!

C>Ох ты ж б*я с*а е*й п*ц.

C>Ну и в качестве вишенки на торте:

C>

C>Director/CTO at TensorStack Ltd.


Давай трезво подумаем.
Есть вариант сначала найти максимум — O(N), затем поискать его индекс — снова O(N). Итого O(N).
Есть вариант явным циклом, менее читаемый, и всё равно O(N).

При этом при ответе сказано:

This is not the most glamorous way but works.


Что не так?

Ну да, я бы ещё дописал "а если вы хотите ну совсем экономно, разверните цикл ручками". Собственно это всё, что не совсем хорошо.

PS: А зачем ты вообще пошёл искать ответ на такой вопрос? )
The God is real, unless declared integer.
Отредактировано 12.11.2024 8:27 netch80 . Предыдущая версия . Еще …
Отредактировано 12.11.2024 7:58 netch80 . Предыдущая версия .
Re[2]: вгоняет в депрессию
От: rFLY  
Дата: 12.11.24 08:10
Оценка:
Здравствуйте, netch80, Вы писали:

N>При этом, если посмотреть с точки зрения процессора, первый скан погрузит массив в кэш, поэтому второй пройдёт быстрее, и будет, условно, не 2*C*N, а 1.1*C*N.

А точно второй продет быстрее, ToList ничего не "попротит"? Тот же кэш не сбросится, да и сам ToList ничего не стоит?
Re[3]: вгоняет в депрессию
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.11.24 08:26
Оценка:
Здравствуйте, rFLY, Вы писали:

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


N>>При этом, если посмотреть с точки зрения процессора, первый скан погрузит массив в кэш, поэтому второй пройдёт быстрее, и будет, условно, не 2*C*N, а 1.1*C*N.

FLY>А точно второй продет быстрее, ToList ничего не "попротит"? Тот же кэш не сбросится, да и сам ToList ничего не стоит?

А, вот это не заметил. Если оно копирует, то тогда часть с кэшом меньше участвует, может оказаться, что нет. Поправлю.
Всё равно остаётся O(N), хоть и криво.
The God is real, unless declared integer.
Отредактировано 12.11.2024 9:28 netch80 . Предыдущая версия .
Re: вгоняет в депрессию
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.11.24 08:29
Оценка: -1 :))
Здравствуйте, Codealot, Вы писали:

C>
C> int maxValue = anArray.Max();
C> int maxIndex = anArray.ToList().IndexOf(maxValue);
C>


C>198 плюсов!

C>Ох ты ж б*я с*а е*й п*ц.

Тебе ж сказали, решение не самое гламурное, но работает. И ведь не обманули.

Да еще к тому же сложность O(n), что вообще шикарно. Могла бы быть O(n^2), например.

C>Ну и в качестве вишенки на торте:

C>

C>Director/CTO at TensorStack Ltd.


Программирующий CTO — это ж круто. Не какой-нибудь там эффективный манагер, а практически, собрат по разуму.
Re[2]: вгоняет в депрессию
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.11.24 08:31
Оценка: +1 :)
Здравствуйте, netch80, Вы писали:

N>Давай трезво подумаем.

N>Есть вариант сначала найти максимум — O(N), затем поискать его индекс — снова O(N). Итого O(N).
N>Есть вариант явным циклом, менее читаемый, и всё равно O(N).

Я не очень, правда, понял, зачем там массив в списек разворачивают. Какое-то лишнее телодвижение, IMHO.
Re: вгоняет в депрессию
От: Osaka  
Дата: 12.11.24 08:33
Оценка:
C> int maxIndex = anArray.ToList().IndexOf(maxValue);
C>198 плюсов!
C>Ох ты ж б*я с*а е*й п*ц.
C>Director/CTO at TensorStack Ltd.
Может, там массив меньше, и на то он и директор, что знает: по итогу в деньгах дешевле так?
Re[4]: вгоняет в депрессию
От: rFLY  
Дата: 12.11.24 08:37
Оценка:
Здравствуйте, netch80, Вы писали:

N>Всё равно остаётся O(N), хоть и криво.

А почему O(N)? Сначала пройтись по массиву, потом создать список и заново пройтись, но уже по списку.
Re[5]: вгоняет в депрессию
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.11.24 08:50
Оценка:
Здравствуйте, rFLY, Вы писали:

N>>Всё равно остаётся O(N), хоть и криво.

FLY>А почему O(N)? Сначала пройтись по массиву, потом создать список и заново пройтись, но уже по списку.

Ну так каждая из этих операций имеет ценой длину списка (равной длине массива).
3*O(N) тоже O(N).
Выделение памяти при схеме работы типичного дотнетовского аллокатора, скорее всего, O(1), а остальное у него размазано на другие операции.
The God is real, unless declared integer.
Re[6]: вгоняет в депрессию
От: rFLY  
Дата: 12.11.24 09:22
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ну так каждая из этих операций имеет ценой длину списка (равной длине массива).

N>3*O(N) тоже O(N).
Формально так, только O более чем в 3 раза дороже в данном случае. Это же не просто взять значение из соседней ячейки, а сначала получить адрес ноды и уже потом ее значение.
Re: вгоняет в депрессию
От: DiPaolo Россия  
Дата: 12.11.24 10:34
Оценка: +1
C>
C> int maxValue = anArray.Max();
C> int maxIndex = anArray.ToList().IndexOf(maxValue);
C>


C>198 плюсов!

C>Ох ты ж б*я с*а е*й п*ц.

Во-во! Давно уже думаю об этом – многие люди не фильтруют ответы на SO. А то ли еще будет с ChatGPT и ему подобными... Некоторые ведь и ему безусловно доверяют. Тут-то и начнет выясняться квалификация разработчиков. А уж сколько понадобится реальных профи, чтобы исправлять потом ошибки такого начатжыпитишеного
Патриот здравого смысла
Re: вгоняет в депрессию
От: syrompe  
Дата: 12.11.24 10:40
Оценка: +2 -1 :))
Ну почему сразу в депрессию-то.

У меня на подобное одна мысль: "без работы не останусь"
Re[2]: вгоняет в депрессию
От: DiPaolo Россия  
Дата: 12.11.24 10:44
Оценка:
Ну и тем не менее, лучше уж O(n), чем O(1.1n) и тем более O(2n). Да, нотация нотацией, но практически это плюс-минус в полтора раза быстрее. И да, конечно, этот кусок – песчинка во всей системе. Но если ничего не стоит написать быстрее (более быстрый код) – почему бы не воспользоваться этим
Патриот здравого смысла
Отредактировано 12.11.2024 11:22 DiPaolo . Предыдущая версия .
Re[3]: вгоняет в депрессию
От: LaptevVV Россия  
Дата: 12.11.24 10:49
Оценка: +1 :))
LVV>>Уровень вопроса или уровень ответа ?
C>Главным образом — ответа.
C>А это не очевидно?
Нет.
Сам уровень вопроса говорит о квалификции вопрошающего.
По его квалификции и дан ответ: делай так и будет работать.
Писать — мало, ошибок точно нет.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: вгоняет в депрессию
От: Stanislaw K СССР  
Дата: 12.11.24 10:55
Оценка: +4 :))) :)))
Здравствуйте, Codealot, Вы писали:


C>Ну и в качестве вишенки на торте:

C>

C>Director/CTO at TensorStack Ltd.


Это он сейчас CTO, а в тот момент когда отвечал (answered Dec 7, 2012 at 0:23) был Junior. И видишь как вырос!
зачлось в карму.
Все проблемы от жадности и глупости
Re[3]: вгоняет в депрессию
От: rFLY  
Дата: 12.11.24 11:16
Оценка: +1
Здравствуйте, DiPaolo, Вы писали:

DP>Но если ничего не стоит написать быстрее – почему бы не воспользоваться этим

Проблема в том, что этот ответ учит плохому начинающих. Он буквально говорит — смотри как просто, делай так. Причем предлагает как раз "гламурное" решение, хотя автор пишет об обратном. Но ужаснее всего, что это топовый ответ.
Re[2]: вгоняет в депрессию
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.11.24 11:16
Оценка: +1
Здравствуйте, netch80, Вы писали:

N>PS: А зачем ты вообще пошёл искать ответ на такой вопрос? )


Вот это поворот!
Re[2]: вгоняет в депрессию
От: Teolog  
Дата: 12.11.24 11:19
Оценка: +1
N>Что не так?

N>Ну да, я бы ещё дописал "а если вы хотите ну совсем экономно, разверните цикл ручками". Собственно это всё, что не совсем хорошо.


Дело не в двойном обходе массива, и какой там к чертям кеш — C# LINQ код такой "оптимальный" что эти понятия не существуют.
Оно создает временный List из массива — при попадании на горячий путь это поставит в неприличное положение всю софтину частыми сборками мусора.
В жизни реального приложения эти сборки приводят к переезду короткоживущих обьектов из других частей программы в старшие поколения и софтина начинает лагать и жрать процессор.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.