Я делаю ADT хэш-набора в c для домашнего задания.Я не могу понять, почему моя логика не работает для функции, которая считает кластеры в хэш-наборе.
void printClusterStats (hashset_ref hashset) {
int **clusters = (int**)calloc (hashset->length, sizeof(int));
assert (clusters);
int ct = 0;
// i traverses hashset->array
// ct adds up words in each cluster
// this loop screws up vvv
for ( int i = 0; i < hashset->length; ++i) {
if (hashset->array[i] == NULL) {
clusters[ct] += 1;
ct = 0;
}else {
ct += 1;
}
}
clusters[ct] +=1; //catch an ending cluster
printf("%10d words in the hash set\n", hashset->load);
printf("%10d length of the hash array\n", hashset->length);
for ( int i = 0; i < hashset->length; i++){
if (clusters[i] == 0) continue;
else{
printf("%10d clusters of size %3d\n", clusters[i], i);
}
}
free(clusters);
}
Вывод этой функции выглядит следующим образом:
26 words in the hash set
63 length of the hash array
96 clusters of size 0
32 clusters of size 1
16 clusters of size 2
4 clusters of size 4
4 clusters of size 6
305 clusters of size 33
-703256008 clusters of size 34
-703256008 clusters of size 35
Для моего входного хэш-набора в массиве содержится 26 слов длиной 63 слова.Однако счет как-то сбивается.
РЕДАКТИРОВАТЬ: я подсчитал кластеры вручную и обнаружил, что каждый счет в 4 раза больше, чем должно быть.Что это значит?