|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
Алгоритм для многопоточности06.09.2016, 12:49. Показов 3459. Ответов 63
Метки нет (Все метки)
Мне нужно написать алгоритм реализации задач(как я думаю делать):
Написать консольную программу, которая выполняет поиск максимального элемента в массиве с 1000000000 элементов. Массив в начале программу можно инициализировать произвольным образом. Программа должна продемонстрировать следующие подходы к решению данной проблемы. - Поиск использует только 1 поток. - Поиск использует 2 потока. - Поиск использует оптимальное количество потоков, которые можно запускать на данном компьютере. - Программа выполняет поиск используя 20 потоков. Подскажите реализацию алгоритма Добавлено через 2 часа 40 минут я как думаю делать: можно поделить 1000000000 елементов на количество потоков и искать в каждом потоке макс а потом сравнить их,то есть если потоков 20 то поделить на 20 частей и потом сравнить эти 20 элементов . Хотя как по мне лучше отсортировать массив и взять последний элемент
0
|
|
| 06.09.2016, 12:49 | |
|
Ответы с готовыми решениями:
63
Написать алгоритм рекурсивного перебора папок в многопоточности с использованием Fork/Join Framework Наилучшее решение для реализации многопоточности |
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
|
|
| 13.09.2016, 07:24 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
||||||||||||||||
| 13.09.2016, 09:15 [ТС] | ||||||||||||||||
|
alexu_007, я много чего не понял в вашем коде) еще надо учить )
А с двома потоками как делать? Просто создавать второй поток? Я так сделал, верно я делаю?
0
|
||||||||||||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|||||||
| 13.09.2016, 10:20 | |||||||
1
|
|||||||
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
||||||
| 13.09.2016, 10:40 [ТС] | ||||||
|
Юрий Петренко, я уже время сделал, но спасибо)
А с двумя потоками я правильно сделал? Переделал время как у Вас и оно 0 выводит
0
|
||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
||||||||||||||||||
| 13.09.2016, 12:10 | ||||||||||||||||||
|
А ты все вычисления делаешь в одной процедуре. Причем два раза проходишься по первой половине массива, а на вторую забил. Забудь пока про потоки, сделай все в основном на маленьких размерах и хорошенько протестируй. Для теста просто назначай много большее число в ручную и убедись что находит именно его. Для начала раздели функциональность. Сделай два метода первый заполняет, второй ищет. Потом сделай так что бы они каждый делал это в своем куске массива, который ты передаешь параметрами. И вызывай их каждый в свое время и на заданном куске. Потом перейдещь к потокам. Про потоки: Число потоков должно равняться числу объектов-вычислителей. А у тебя создан всего один объект потока. QThread thread; для двух потоков нужно что бы было два объекта потоков. т.е.
1
|
||||||||||||||||||
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
| 14.09.2016, 07:46 [ТС] | |
|
Юрий Петренко,
а для одного потока я правильно сделал?
0
|
|
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|||||||
| 14.09.2016, 11:35 | |||||||
Когда ты делаешь oneThread.run(); - ты запускаешь его в основном потоке. Он отрабатывает. А затем ты запускаешь поток thread.start();, который вызывает oneThread.run(); (т.к. ты его приконнектил на старт потока), и вот уже тогда твой oneThread.run(); начинает работать в своем потоке.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
| 14.09.2016, 12:54 [ТС] | |
|
Юрий Петренко, а можете если Вам не сложно взять мой код для одного потолка и удалить, исправить все что не так. А то я немного затупи уже)
0
|
|
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
| 14.09.2016, 13:13 | |
|
Нет, работы много, да это и не правильный подход.
Ты лучше задавай вопросы, что не понятно. Постараюсь объяснить.
0
|
|
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|||||||||||
| 14.09.2016, 13:33 [ТС] | |||||||||||
|
Юрий Петренко, ок. что не правильно у меня в коде? Код работает, правильно выводит ответ. Поэтому и попросил Вас посмотреть может быть не правильно делаю через один поток.
Добавлено через 14 минут Юрий Петренко, я так понял , этот код для всех потоков будет одинаковый?
0
|
|||||||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
| 14.09.2016, 13:43 | |
|
В правильном направлении думаешь, но ты намерен для каждого потока писать свой класс OneThread, TwoThread, ... ?
Добавлено через 2 минуты У тебя ведь в задаче стоит условие запускать для оптимального количества потоков. Для разных машин оно разное. Это что для каждой машины своя программа? Добавлено через 3 минуты На самом деле тебе нужно что бы был один класс OneThread (лучше переименовать его в Worker) и столько объектов этого класса сколько потоков ты хочешь запустить.
0
|
|
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|||||||||||
| 14.09.2016, 14:01 [ТС] | |||||||||||
|
Юрий Петренко, я же написал что нужно переименовать клас OneThread в просто MyThread, и он не изменяется, а додавать потоки в меин. Правильно?
Добавлено через 1 минуту На самом деле тебе нужно что бы был один класс OneThread (лучше переименовать его в Worker) и столько объектов этого класса сколько потоков ты хочешь запустить. - это не понял , Вы имеет введу это? OneThread oneThread(1); - тут один поток. OneThread oneThread(2); - тут два потока Добавлено через 16 минут Юрий Петренко, переименовал:
0
|
|||||||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
| 14.09.2016, 14:12 | |
|
Стас, сейчас ты создаешь N маленьких массивов, каждый в своем потоке. заполняешь и сортируешь.
А по условиям задачи это должен быть один непрерывный массив. Перенеси создание и заполнение для начала в мэин. А сортировку делай из потока.
0
|
|
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|||||||||||
| 14.09.2016, 15:02 [ТС] | |||||||||||
|
Юрий Петренко, я ничего не понял. Если я перенесу в mаin создание и заполнение, то в Worker что мне делать? мне нужно максимум найти и если я все перенесу в меин то как я буду в Worker фором работать чтобы максимум найти?.
То что я сделал, как я понял что нужно сделать:
Добавлено через 12 минут Юрий Петренко, я дествительно хочу разобраться, но я запутался, я сделал как я думал правильно, віяснилось что совсем не правильно, и я не уловил суть как правильно сделать..... И с каждой вашей подсказкой я запутался еще дальше....
0
|
|||||||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|||||||
| 14.09.2016, 15:07 | |||||||
|
Не расстраивайся потоки это действительно сложно, сейчас потихоньку разберемся.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
||||||
| 14.09.2016, 15:12 [ТС] | ||||||
|
Юрий Петренко,
тоесть мне это уже не нужно в хедере?
0
|
||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
||||||
| 14.09.2016, 15:26 | ||||||
|
Пригодится.
Теперь проблема как передать наружу из потока результат работы метода. Для этого воспользуемся сигналом. Но придется переделать.
0
|
||||||
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|||||||||||
| 14.09.2016, 15:31 [ТС] | |||||||||||
|
Юрий Петренко, ок. переделал
0
|
|||||||||||
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
| 14.09.2016, 15:58 | |
|
Теперь у тебя есть класс который может найти максимум на отрезке массива.
И ты можешь сделать, например, 10 объектов этого класса, 10 потоков. Передать в каждый объект свой отрезок массива, каждый объект засунуть в отдельный поток. И они будут вполняться.
0
|
|
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|||||||||||
| 14.09.2016, 16:07 [ТС] | |||||||||||
|
Юрий Петренко, теперь я в меине создаю и заполняю масив?
Давайте для 1 потока сделаемо, я буду делать по кроку :
Все верно? а как тут в форе делать:
0
|
|||||||||||
| 14.09.2016, 16:07 | |
|
Помогите алгоритм для char переделать в алгоритм для float Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке [a,b] с шагом h. Составить алгоритм-вычисление квадрата суммы двух чисел и алгоритм для вычисления функции Кто может составить алгоритм по проге? Алгоритм нужен для отчета если вам это интересно) по многопоточности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|