Консультация # 184726: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: надо реализовать простой вариант метода ветвей и границ для задачи коммивояжёра. Требования к программе: - в списке хранить под-задания - точнее указатели на них и упорядочивать эти подзадачи по значению границы - каждый раз выбирать из списка "самую потенциально лучшую" подз...
Консультация # 184731: Здравствуйте! У меня возникли сложности с таким вопросом: Необходимо Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от -999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив...
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: надо реализовать простой вариант метода ветвей и границ для задачи коммивояжёра. Требования к программе: - в списке хранить под-задания - точнее указатели на них и упорядочивать эти подзадачи по значению границы - каждый раз выбирать из списка "самую потенциально лучшую" подзадачу - и делить её ровно на две - при этом разделяющий элемент выбирать по какому либо самому простому (и быстрому) но жадному" алгоритму - в "правой"
задаче он войдёт в СПИСОК таких ВЫБРАННЫХ элементов (добавится к уже имеющемуся такому списку у задачи-родителя), а в "левой" - добавится к списку табулированных элементов - генерация входов - это так называемая геометрическая ЗКВ( где точки равномерно разбрасываются в N-мерный куб ([0,1])^N(интересны значения N от 3 до скажем 11)) - подсчитать "количественные характеристики выполнения программы";
Здравствуйте, Yulesik! Вот, перевела из этого алгорима. Если будут вопросы, пишите. Результат проверила, с паскалевской программой совпадает. Компилировалось под MS VS 2010. Удачи!
Здравствуйте! У меня возникли сложности с таким вопросом: Необходимо Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от -999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив обрабатывается двумя другими потоками В и С, работающими параллельно с потоком, создающим массив. Все потоки выводят результаты своей работы в текстовые окна,
каждый поток в свое окно. А)Определение длины пространственной ломаной линии, соединяющей точки, координаты которых заданы каждой тройкой чисел Б)Вычисление отклонений всех чисел от округленного среднего арифметического
Можете назначить свою цену если в этом есть необходимость.
WaitForSingleObject Эта функция приостанавливает выполнение текущего потока до тех пор,
пока указанный в её параметрах объект ядра не придёт в сигнальное состояние (также возможен
выход по таймауту). Применяется для ограниничения доступа к разделяемым ресурсам.
Параметром чаще всего служит событие, семафор или мьютекс, н
о также в качестве параметра
может выступать уведомление (notification), процесс, поток и некоторые другие объекты.
Возвращаемое значение показывает, что послужило выходом из функции. Это может быть
WAIT_ABANDONED (специфическое значение, возвращаемое в случае завершения потока, владеющего
мьютексом), WAIT_OBJECT_0 (объект получил сигнальное состояние - в этом случае функция сама
переводит его в несигнальное, а для семафора наращивает счётчик числа занятых ресурсов),
WAIT_TIMEOUT (функция вышла по таймауту).
Код :
DWORD WaitForSingleObject(
HANDLE
hHandle, //Описатель объекта ядра, сигнальное состояние которого нас интересует
DWORD
dwMilliseconds //Таймаут, по истечению которого прервать ожидание
);
Рассмотрим
подробнее некоторые параметры функции: dwMilliseconds - здесь можно указать любой
необходимый таймаут, кроме того, если указать 0, функция вернёт потоку управление сразу
(таким образом можно проверить состояние объекта), а если указать константу INFINITE,
функция не будет учитывать время и будет ждать только сигнального состояния объекта ядра. Более подробную информацию можно получить в MSDN. CreateThread Эта функция создаёт поток
внутри адресного пространства текущего процесса. Возвращает описатель созданного потока.
Функция полезна, когда, например, нужно выполнять какие-то действия в оконном приложении,
но не отключать при этом его интерфейс. В общем случае поток начинает работу сразу после
вызова этой функции, и все действия, которые он выполняет, не меша
ют работе программы.
Код :
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //Аттрибуты защиты
SIZE_T dwStackSize, //Размер стека потока (если указать 0, то берётся по умолчанию)
LPTHREAD_START_ROUTINE lpStartAddress, //Адрес стартовой функции
LPVOID lpParameter,
//Параметр для передачи потоку
DWORD dwCreationFlags, //Служебные флаги
LPDWORD
lpThreadId //ID потока
);
Рассмотрим подробнее некоторые параметры функции: lpStartAddress - указатель на стартовую функцию потока (т.е. её название), которую надо
объявить внутри приложения. Она должна иметь определённый вид:
Код :
DWORD WINAPI
ThreadProc( //Имя функции может быть произвольным
LPVOID lpParameter
);
lpParameter - параметр, передаваемый в стартовую функцию потока. Если потоку необходимо
передать несколько параметров, следует либо использовать глобальные переменные, либо
объявлять структуру со всеми необходимыми данными и передавать её. dwCreationFlags - в
основном этот параметр используется для того, чтобы обозначить, следует ли запустить поток
сразу после создания или по вызову функции ResumeThread (в первом случае в параметре можно
передать
0, во втором - флаг CREATE_SUSPENDED). lpThreadId - возвращаемый параметр - id
потока, который иногда может быть полезен (например, если потоку будет посылаться
сообщение). Если id не нужен, можно передать NULL. Более подробную информацию можно получить
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!