Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2018, 09:31   #1
olena_nov
 
Регистрация: 26.12.2017
Сообщений: 8
По умолчанию Многопоточность

У меня есть такая задачка:
Есть 3 массивы
1 содержит 2 миллиона символов
2 содержит 1000000 символов
3 содержит 3 миллиона символов

программа должна вывести на экран символ который встречается наибольшее количество раз в каждом из массивов

программа должна сделать поиск как можно быстрее
Я немного что знала написала, теперь нужна ваша помощь. Я хочу разделить каждый масив на количество потоков которое может мой комп обработать. И пройтись потоками, но я не знаю как пройтись, Нужна ваша помощь. И там искать сколько раз символ встречается
Что у меня есть уже:
Код:
#include "stdafx.h"
#include <thread>
#include <iostream>

class Multithreading 
{
public:

private:
	
	long foundSymbol(long array);

};

long Multithreading::foundSymbol(long array)
{
	unsigned maxThreadCount = std::thread::hardware_concurrency();
	long array;
	unsigned size = sizeof(array) / sizeof(long);
	
	const std::size_t minLength = size / maxThreadCount;
	const std::size_t modulo = size % maxThreadCount;

}

int main()
{
	long array1[2000000];
	long array2[1000000];
	long array3[3000000];
}

Последний раз редактировалось olena_nov; 15.10.2018 в 09:40.
olena_nov вне форума Ответить с цитированием
Старый 15.10.2018, 11:59   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так что непонятно? Алгоритм вы свой вроде описали. Что значит "не знаю как пройтись"? Для начала можно тупо циклом в лоб на своем участке...
p51x вне форума Ответить с цитированием
Старый 15.10.2018, 12:52   #3
olena_nov
 
Регистрация: 26.12.2017
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так что непонятно? Алгоритм вы свой вроде описали. Что значит "не знаю как пройтись"? Для начала можно тупо циклом в лоб на своем участке...
я не знаю как использовать многопоточность
olena_nov вне форума Ответить с цитированием
Старый 15.10.2018, 13:00   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от olena_nov Посмотреть сообщение
Я хочу разделить каждый масив на количество потоков которое может мой комп обработать
Это не серьёзно. Линейный проход в цикле даже по 3 миллионам элементов выполняется очень быстро. Вы больше потреряете на накладных расходах по запуску потоков и сведению их результатов
Black Fregat вне форума Ответить с цитированием
Старый 15.10.2018, 13:40   #5
olena_nov
 
Регистрация: 26.12.2017
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Это не серьёзно. Линейный проход в цикле даже по 3 миллионам элементов выполняется очень быстро. Вы больше потреряете на накладных расходах по запуску потоков и сведению их результатов
не я придумала задание)))) что задали то и решаю)
olena_nov вне форума Ответить с цитированием
Старый 15.10.2018, 13:53   #6
olena_nov
 
Регистрация: 26.12.2017
Сообщений: 8
По умолчанию

Я дописала еще свою функцию
Код:
long Multithreading::foundSymbol(long array)
{
	unsigned maxThreadCount = std::thread::hardware_concurrency();
	long array[10];
	unsigned size = sizeof(array) / sizeof(long);
	
	const std::size_t minLength = size / maxThreadCount;
	const std::size_t modulo = size % maxThreadCount;

	std::vector<std::size_t> intervalThread;
	intervalThread.reserve(maxThreadCount);

	for (std::size_t i = 0; i < modulo; ++i)
		intervalThread.emplace_back(minLength + 1);

	if (minLength > 0)
	{
		for (std::size_t i = modulo; i < maxThreadCount; ++i)
			intervalThread.emplace_back(minLength);
	}
	int count = 0;
	for (std::size_t i = 1; i < intervalThread.size(); ++i) 
	{
		if (array[i] == count)
			++count;
		else
			count = 0;
	}
		
}
olena_nov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточность symrak Общие вопросы C/C++ 2 11.04.2013 16:29
Многопоточность в C Ryabinin313 Общие вопросы C/C++ 2 30.10.2011 18:02
Многопоточность WennY Общие вопросы Delphi 11 23.04.2011 00:46
Многопоточность boo_mago Общие вопросы C/C++ 7 21.03.2011 21:23
Многопоточность Dezmont_ Общие вопросы .NET 1 06.11.2010 18:34