Open kuvshinovdr opened 10 months ago
подскажите пожалуйста, что такое u и v в 4ом пункте?
Вы всё-таки делаете эту задачу? Она, в принципе, не сложная.
что такое u и v в 4ом пункте
Это просто номера двух вершин, которые мы соединяем ребром. Если оказалось, нам достаточно рассматривать только такие пары, что u < v.
да, решила сделать эту хорошо, спасибо
код выложила, только без теста
После этого цикла:
for (Scalar_index item; vertices->next(item);) {
++count_of_vertices;
}
индексы вершин уже не будут доступны, поскольку vertices->next будет всегда возвращать false. Лучше их тогда сохранить в вектор сразу, а потом уже брать его размер.
Здесь должно быть отрицание условия:
if (count_of_vertices > 0 && (count_of_vertices & (count_of_vertices - 1)) == 0) {
throw std::invalid_argument("make_hypercube_one_direction: count of vertices != 2^n.");
}
Зачем нам вектор masks
std::vector<Scalar_index> masks;
for (Scalar_index i = 1, j = 0; j < n; i = i << 1, ++j) {
masks.push_back(i);
}
если masks[j] можно получить как Scalar_index(1) << j?
сделала правки в соответствии с замечаниями
Хорошо, задание засчитано, баллы выставлены в таблицу. Пока что в main я код не добавляю и этот issue не закрываю по сторонним причинам.
Эта функция должна создавать гиперкуб на вершинах, перечисляемых vertices. Число этих вершин должно быть степенью двойки. Если это не степень двойки, бросать исключение std::invalid_argument. Показатель степени двойки определяет размерность гиперкуба и количество рёбер добавляемых для каждой вершины.
Примеры по размерности:
Вообще, в гиперкубе размерности n число вершин $V(n) = 2^n$, число рёбер $E(n) = 2E(n-1) + V(n-1)$, $E(0) = 0$, т.е. $E(n) = n\cdot 2^{n-1}$.
Теперь о том, как генерировать рёбра: