Мой вопрос заключается в том, как реализовать бит-карту в следующей ситуации?
Если вершина графа находится в минимальном остовном дереве (MST), отметьте соответствующий бит; позже проверьте, находится ли он в MST, проверив бит.реализовать бит-карту в следующей ситуации
В начале я думал об использовании
typedef struct bit_t{
char bit0:1;
} bit;
bit bitmap[num_of_vertex];
и использовать массив растровых изображений для записи бита;
Но тогда я обнаружил, что sizeof (bitmap [num_of_vertex]) - это num_of_vertex байт, а не num_of_vertex/8 байт. поэтому он не экономит место, как я думал;
До сих пор я использую
long bit_record = 0;
...
bit_record |= 1<< u;//set vertex as in MST
...
затем позже проверить, является ли вершина в MST с помощью:
static bool is_in_MST(int v, int bit_record){
int mask = 1 << v;
if (mask & bit_record)
return true;
else
return false;
}
Хотя код работает, он не будет работать, если num_of_vertex больше 32.
Как вообще реализовано растровое изображение в вышеуказанной ситуации?
Инициализация может быть выполнена быстрее, итерации по массиву и просто установите это значение в 0, то есть 'for (i = 0; i
flolo
@flolo, но он вычисляет 'N/BITPERWORD + 1' каждый раз. Я думаю, вы имеете в виду, что 'int temp = N/BITPERWORD + 1; for (i = 0; i
vvy
каждый оптимизирующий компилятор, заслуживающий этого имени, распознает его как цикл-инвариантный код и не будет перепрограммировать его на каждую итерацию. – flolo