Какой лучший способ найти максимум нет?

Какой лучший способ написать программу, чтобы найти максимум 4 no.s в C / C ++:

  1. используя пятую переменную & сравнивая его со всеми входами
  2. используя функцию max ()
  3. и сравнивая входы, используя, если

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

Будет ли такой же алгоритмический подход все же лучшим в случае более 4 переменных?

-1

Решение

Для большого количества элементов в стандартной библиотеке есть std::max_element алгоритм, который делает max(N-1, 0) сравнения для N элементы, которые его теоретический минимум, даже для 4 элементов.

На практике, он проходит по всем элементам, как и ваш метод 1., но он может сделать «турнир исключения» из вложенных max если N это степень 2 (ваш метод 2). Некоторый оптимизирующий компилятор может даже развернуть цикл и создать сложную цепочку if заявления (ваш метод 3).

В комментариях решение в стиле C ++ 11 max({a,b,c,d}) был предоставлен @NathanOliver (который работает только в constexpr контексты). Но в C ++ 1z std::max_element также станет constexpr так что это будет полностью общее решение, маленькое или большое, во время выполнения или во время компиляции.

TL; DR: не думайте об этом, используйте стандартную библиотеку, которая выполняет минимально возможный объем работы.

2

Другие решения

Лучше потерять термин. Как указано в комментариях

max(max(a,b), max(c,d));

очень кратко, однако есть 3 вызова функции. Это немного быстрее кода, но гораздо больше кода, чтобы написать что-то вроде:

if (a>b)
{
if (a>c)
{
if (a>d)
{
return (a);
}
}
}

if (b>a)
{
if (b>c)
{
if (b>d)
{
return (b);
}
}
}
if (c>a)
{
if (c>b)
{
if (c>d)
{
return (c);
}
}
}

if (d>a)
{
if (d>b)
{
if (d>c)
{
return (d);
}
}
}
0

По вопросам рекламы [email protected]