tasks) или метод Parallel.For.CancellationToken.Клеточная модель представляет собой множество клеток (ячеек таблицы), принимающих одно из нескольких состояний. Состояние каждой клетки определяется состоянием её ближайших соседей. Одной из известных моделей является "Игра Жизнь" математика Дж. Конвея.
В модели Конвея каждая клетка может находиться в двух состояниях: живая или неживая. Состояние клетки на следующем шаге определяется потенциалом клетки (числом живых соседних клеток):
Правила изменения состояния клетки можно описать следующим лямбда-выражением:
var lifeRules = new Func<int, bool, bool>((p, state) =>
{
if(p == 3)
return true;
else if (p == 2)
return state;
else
return false;
});
Последовательный алгоритм расчета представляет собой расчет состояния каждой клетки
LifeTable tableNew = new LifeTable;
for(int i=0; i < Height; i++)
for(int j=0; j < Width; j++)
{
p = CalcPotential(table[i,j]);
tableNew[i, j] = lifeRules(p, table[i, j]);
}
table = tableNew;
Потенциал клетки вычисляется по восьми ближайшим соседям клетки.
int CalcPotential(int i, int j)
{
int p=0;
for(int x = i-1; x <= i + 1; x++)
for(int y = j-1; y <= j + 1;y++)
{
if(x < 0 || y < 0 || x >= Height || y >= Width
|| (x == i y == j))
continue;
if(table[x,y]) p++;
}
return p;
}
Вычисления новых состояний для каждой клетки являются независимыми и могут выполняться параллельно.
Parallel.For(0, Height, (i) => {
for(int j=0; j < Width; j++)
{
p = CalcPotential(table[i,j]);
tableNew[i, j] = lifeRules(p, table[i, j]);
}
});
Также можно изменить порядок расчета и распараллелить внешний цикл по столбцам:
Parallel.For(0, Width, (j) => {
for(int i=0; i < Height; i++)
{
p = CalcPotential(table[i,j]);
tableNew[i, j] = lifeRules(p, table[i, j]);
}
}
Вывод таблицы состояний клеточной модели может быть следующим:
for(int i=0; i < Height; i++)
{
Parallel.For(0, Width, j =>
{
p = CalcPotential(table[i,j]);
tableNew[i, j] = lifeRules(p, table[i, j]);
});
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.