Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/64: Рейтинг темы: голосов - 64, средняя оценка - 4.91
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32

Найти минимум в массиве используя наиболее оптимальный алгоритм

03.08.2016, 22:30. Показов 15324. Ответов 186
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан массив чисел, надо найти минимум. Препод сказал - дополнительное задание: предложить наиболее оптимальный алгоритм, написать код, реализующий его идею, и обосновать его теоретически.
4
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.08.2016, 22:30
Ответы с готовыми решениями:

Используя Linq найти минимум и максимум в массиве.
Привет! У меня вопрос...для C#... Пример: int n=int.Parse(Console.ReadLine()); int arr=new int; for(int i=0;i<n;i++) { ...

Найти среднее арифметическое, максимум, минимум в массиве, используя функции пользователя.
Дан массив чисел. Найти среднее арифметическое, максимум, минимум используя функции пользователя. Сделать, чтобы работала для массива из...

В массиве A(m,n) в каждом столбце найти минимум, умножить каждый минимум на 5 и найти произведение этих чисел.
В массиве A(m,n) в каждом столбце найти минимум, умножить каждый минимум на 5 и найти произведение этих чисел. помогите решить задачу...

186
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.08.2016, 09:52
Студворк — интернет-сервис помощи студентам
Ferrari F1, Потому что затратит время на "создание" этих самых потоков. Ну, в моем случае, просто затратит время на осознание того, что их создать нельзя и надо их эмулировать или как там на самом деле это делается.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
08.08.2016, 10:06
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
если потоки выполняются синхронно, то это должно создавать выигрыш во времени.
не факт
давай рассмотрим твой вариант по 2 элемента и массив на 128 элементов(считать удобней), допустим есть 100 процессоров значит все потоки выполняются параллельно,
первый проход 64 потока, дополнительный массив 64 элементов
второй проход 32 потоков, доп массив 32 элемента
третий проход 16 потоков, доп массив 16 элементов
четвертый проход 8 потоков, доп массив 8 элементов
пятый проход 4 потока, доп массив 4 элемента
шестой проход 2 потока, доп массив 2
седьмой проход 1 поток, выход
вроде бы всего 7 сравнений
но нужна дополнительная память, а это расходы на обслуживания памяти, в отличии от однопоточного где работа скорее всего будет вестись с регистрами
плюс обслуживание потоков
я как то разворачивал цикл от 2 до 128,, здесь же была задачка, так вот,после какого то числа, скорость исполнения резко падала, поскольку результаты заносились в ОЗУ а не в регистры
в общем пробовать надо
и универсального решения нет поскольку от сложности O(N) никуда не уйдешь
1
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
08.08.2016, 10:06
Цитата Сообщение от _Ivana Посмотреть сообщение
А на словах передали, что f-ки запускаются в разных потоках/на разных компьютерах, а s рассчитывается из размера массива и количества независимых ядер/компьютеров. Он сказал - пойдет.
Меняй преподавателя Этот код мало того, что не cache friendly ( т.к. постоянно приходится обращаться к разным частям массива), так и, как я уже говорил, попытки распараллелить алгоритм будут в целом бесполезными. Очевидно же, что на процессор нагрузка минимальная ( парочка арифметических операций ), а основная нагрузка здесь будет на шину памяти ( которая, как правило, одна для всех ядер ).
2
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
08.08.2016, 11:23
Цитата Сообщение от IGPIGP Посмотреть сообщение
факт того, что на процессоре в 5Гц, это будет быстрее чем на процессоре в 1 Гц, не говорит об ускорении алгоритма.
Здравая мысль.
Можно ли ускорить поиск наименьшего элемента массива в миллион раз раз?
Можно, если использовать миллион компьютеров!
Разбиваем массив на миллион частей.
И одновременно выполняем:
на первом компьютере - поиск в первой части массива,
на втором - во второй части (если она есть)
и т.д.
на последнем - находим минимум из минимумов, найденных на предыдущих компьютерах.
(разумеется, это примитивные рассуждения, без рекурсии и прочих тонкостей):

Только это не ускоренный алгоритм поиска минимального значения, а лишь распределение выполнения обычного алгоритма между несколькими компьютерами (ядрами), дающий выигрыш лишь для массивов с большИм (в нашем случае - больше миллиона) числом элементов.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.08.2016, 12:44
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
IGPIGP, в теории, если потоки выполняются синхронно, то это должно создавать выигрыш во времени. Очевидность
Вас не проведёшь Ferrari F1. Вы знаете секрет. Так раскройте его, пояснив в чём это противоречит сказанному мной и другими?

Добавлено через 6 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
в отличии от однопоточного где работа скорее всего будет вестись с регистрами
если целые сравнивать, -да. А если оператор сравнения вычисляет вероятность совпадения характеристик методом кореляционных моменnов? У много-поточности есть аргументы и на небольших массивах.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
08.08.2016, 12:54
IGPIGP, ничем) Моя беда в том, что я очень тороплюсь с ответом практически всегда.
Тороплюсь так, что очень поверхностно читаю и понимаю комментарии людей, на чьи сообщения я впоследствии отвечаю...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.08.2016, 13:02
Цитата Сообщение от IGPIGP Посмотреть сообщение
А если оператор сравнения вычисляет вероятность совпадения характеристик мета галактик методом корреляционных моментов?
(шутка юмора) написал неправильно.
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Моя беда
Бывает)
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.08.2016, 14:55  [ТС]
Цитата Сообщение от Voivoid Посмотреть сообщение
Меняй преподавателя
Ну мыж теоретики, у нас и кафедра теоретического рассусоливания на отвлеченные темы Так что препод подходящий. А всякие кеши-шины-векторизации и прочие детали реализации для нас непринципиальны (по крайней мере в этой задаче) - нам главное хвост принцип Тем более, что общий принцип справедлив и в ситуациях, когда нет кешей-ограничений шин-векторизованных операций и прочих аппаратных особенностей.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
08.08.2016, 15:17
Цитата Сообщение от _Ivana Посмотреть сообщение
нам главное хвост принцип
Принцип тож не очень, т.к. UB на пустом массиве
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.08.2016, 15:19  [ТС]
Цитата Сообщение от Voivoid Посмотреть сообщение
UB на пустом массиве
ну это ерунда, и опять таки детали реализации, не влияющие на принцип. А он в том, что некоторые алгоритмы тривиально распараллеливаются, а некоторые не очень
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
08.08.2016, 15:27
Цитата Сообщение от _Ivana Посмотреть сообщение
Тем более, что общий принцип справедлив и в ситуациях, когда нет кешей-ограничений шин-векторизованных операций и прочих аппаратных особенностей.
Тогда надо писать на haskell'е и надеяться на оптимизации компилятора
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.08.2016, 15:36  [ТС]
Voivoid, ну вы же понимаете, что любая теоретическая задача должна решаться в рамках каких-либо условий и ограничений. Есть абстракция "массив" - это доступ за определенное количество времени (условных тактов) к любому элементу - все, это данность. А в реальности в одних ситуациях у нас оказывается есть некий кеш памяти, и если массив не влезает весь в кеш, то при доступе к разным участкам/элементам происходит перезагрузка кеша, что замедляет общий доступ. То же самое про векторизацию и т.п. Но нам на уроках теории фиолетово это все - мы занимаемся принципами. А на уроках практики мы будем учитывать все эти особенности аппаратной реализации. И то, только если они там будут.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.08.2016, 16:53
Цитата Сообщение от _Ivana Посмотреть сообщение
Но нам на уроках теории фиолетово это все - мы занимаемся принципами. А на уроках практики мы будем учитывать все эти особенности аппаратной реализации.
Дык этого же не было в условии и каждый наивно подумал, что мыж практики тут все (кроме меня ).
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.08.2016, 16:57  [ТС]
IGPIGP, хорошо, в следующий раз я буду указывать предмет и отдельно оговаривать, что
влиянием далеких звезд можно пренебречь
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.08.2016, 17:23
Цитата Сообщение от _Ivana Посмотреть сообщение
влиянием далеких звезд можно пренебречь
Ну их свет не влияет не на кеш ни на шину. Это и так ясно. Теорию струн трогать не будем.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
08.08.2016, 17:25  [ТС]
Так и кеш с шиной не влияют на принцип алгоритма распараллеливания. А фраза про далекие звезды действительно встречалась у нас в задачках по физике, даже не на тему теории струн
0
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
03.02.2017, 14:48
C++
1
return *std::min_element(std::begin(arr), std::end(arr));
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.02.2017, 17:10
Для С++17 есть constexpr версия min_element, так что "дождались".
Но для С++11 уже можно сделать CT алгоритм
http://stackoverflow.com/quest... mpile-time

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

Добавлено через 8 минут
Дабы не быть голословным:
http://www.open-std.org/jtc1/s... /n4618.pdf
Страница 993,
// 25.5.7, minimum and maximum
template<class ForwardIterator>
constexpr ForwardIterator min_element(ForwardIterator first, ForwardIterator last);
1
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
03.02.2017, 17:35
Цитата Сообщение от MrGluck Посмотреть сообщение
Так что самый быстрый алгоритм вычисляет результат в момент компиляции и при выполнении мы лишь выводим результат.
Если загнать в узкие рамки,
то самый быстрый алгоритм будет
тот, который работает с
массивом из одного элемента.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.06.2017, 18:44
Цитата Сообщение от Croessmah Посмотреть сообщение
Если загнать в узкие рамки,
то самый быстрый алгоритм будет
тот, который работает с
массивом из одного элемента.
Массив указателей указывающих на элементы одного списка с некоторым шагом. Тут есть и расширяемости и произвольного доступа по чуть-чуть. А чтобы не класть в список обратные ссылки на узлы хранимые в массиве можно сделать итераторы списка переменными. А ещё лучше - список - хранилище (куда всё заходит по мере поступления), и ещё пара о которой сказано, то есть упорядоченный список итераторов хранилища и вектор часть данных которого - итераторы данного списка. Это лучше увидеть. Вот тута:
https://www.cyberforum.ru/blog... g4772.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2017, 18:44

В массиве а ( m, n ) в каждом столбце найти минимум, вывести эти минимумы в линейный массив, умножить каждый минимум на 5 и найти произведение
В массиве а (m, n) в каждом столбце найти минимум, вывести эти минимумы в линейный массив, умножить каждый минимум на 5 и найти...

Необходимо поменять местами минимум и максимум в массиве, используя функции
В общем, не могу разобраться что не так в функции min_ar и max_ar, сама программа запускается но после ввода массива выдает...

Используя EXTREMUM найти все опорные планы и оптимальный план
Для задач линейного программирования геометрическим методом с помощью программы EXTREMUM найти все опорные планы и оптимальный план.

Нарисовать статичную картинку, используя минимум 5 цветов, минимум 30 объектов
Нарисовать статичную картинку, используя минимум 5 цветов, минимум 30 объектов (линии, прямоугольники и др.) и содержащую текст.

Найти максимум и минимум НЕ используя оператор IF
Нужно ввести 2 вещественных числа и определить, какое из них максимальное, а какое минимальное, не используя оператор IF/ Не догоняю как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru