BMINAIEV_BLOG Telegram 44
Гамильтонов цикл.

Вчера читал статью на викиконспектах итмо про нахождение гамильтонова цикла наименьшей стоимости. В статье приведен псевдокод, а вот мой вольный перевод на С++:

double findCheapest(int i, int mask) {
if (d[i][mask] != inf) return d[i][mask];

for (int j = 0; j < N; j++)
if ((mask & (1 << j)) != 0)
d[i][mask] =
std::min(d[i][mask], findCheapest(j, mask - (1 << j)) + w[i][j]);

return d[i][mask];
}

double start() {
for (int i = 0; i < N; i++)
for (int mask = 0; mask < (1 << N); mask++) d[i][mask] = inf;
d[0][0] = 0;
return findCheapest(0, (1 << N) - 1);
}

Отгадайте за сколько он работает?

Правильно, за θ(n!). Например, если в графе вообще нет гамильтонова цикла, то все d[i][mask] будет равны inf и каждый раз будут вычисляться заново. А теперь давайте представим, что между всеми вершинами в графе есть ребра. За сколько будет работать теперь?

Неправильно, все еще за θ(n!). Отгадайте почему.

Если вы смотрите на этот код уже 5 минут, и не верите мне, то попробуйте запустить его локально: https://pastebin.com/ZhzYqRmx



tgoop.com/bminaiev_blog/44
Create:
Last Update:

Гамильтонов цикл.

Вчера читал статью на викиконспектах итмо про нахождение гамильтонова цикла наименьшей стоимости. В статье приведен псевдокод, а вот мой вольный перевод на С++:

double findCheapest(int i, int mask) {
if (d[i][mask] != inf) return d[i][mask];

for (int j = 0; j < N; j++)
if ((mask & (1 << j)) != 0)
d[i][mask] =
std::min(d[i][mask], findCheapest(j, mask - (1 << j)) + w[i][j]);

return d[i][mask];
}

double start() {
for (int i = 0; i < N; i++)
for (int mask = 0; mask < (1 << N); mask++) d[i][mask] = inf;
d[0][0] = 0;
return findCheapest(0, (1 << N) - 1);
}

Отгадайте за сколько он работает?

Правильно, за θ(n!). Например, если в графе вообще нет гамильтонова цикла, то все d[i][mask] будет равны inf и каждый раз будут вычисляться заново. А теперь давайте представим, что между всеми вершинами в графе есть ребра. За сколько будет работать теперь?

Неправильно, все еще за θ(n!). Отгадайте почему.

Если вы смотрите на этот код уже 5 минут, и не верите мне, то попробуйте запустить его локально: https://pastebin.com/ZhzYqRmx

BY Боря программирует


Share with your friend now:
tgoop.com/bminaiev_blog/44

View MORE
Open in Telegram


Telegram News

Date: |

Although some crypto traders have moved toward screaming as a coping mechanism, several mental health experts call this therapy a pseudoscience. The crypto community finds its way to engage in one or the other way and share its feelings with other fellow members. More>> Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators. Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Find your optimal posting schedule and stick to it. The peak posting times include 8 am, 6 pm, and 8 pm on social media. Try to publish serious stuff in the morning and leave less demanding content later in the day.
from us


Telegram Боря программирует
FROM American