#include <stdio.h> #include <string.h>

#define MAX_LEN 50 #define K 3

typedef struct { char name[MAX_LEN]; char gender[MAX_LEN]; int age; char zip_code[MAX_LEN]; char preference[MAX_LEN]; } Record;

void print_table(Record *table, int size) { printf("姓名\t性别\t年龄\t邮编\t购买偏好\n"); for (int i = 0; i < size; i++) { printf("%s\t%s\t%d\t%s\t%s\n", table[i].name, table[i].gender, table[i].age, table[i].zip_code, table[i].preference); } }

void generalize_name(Record table, int size) { for (int i = 0; i < size; i++) { memset(table[i].name, '', strlen(table[i].name)); } }

void generalize_age(Record *table, int size) { for (int i = 0; i < size; i++) { if (table[i].age >= 20 && table[i].age < 25) { table[i].age = 20; } else if (table[i].age >= 25 && table[i].age < 30) { table[i].age = 25; } else if (table[i].age >= 30 && table[i].age < 35) { table[i].age = 30; } else { table[i].age = 35; } } }

void suppress_zip_code(Record *table, int size) { for (int i = 0; i < size; i++) { table[i].zip_code[strlen(table[i].zip_code) - 2] = '0'; table[i].zip_code[strlen(table[i].zip_code) - 1] = '0'; } }

void anonymize_table(Record *table, int size) { generalize_name(table, size); generalize_age(table, size); suppress_zip_code(table, size); }

int count_combinations(Record *table, int size) { int count = 0; for (int i = 0; i < size; i++) { int match = 0; for (int j = 0; j < size; j++) { if (strcmp(table[i].name, table[j].name) == 0 && strcmp(table[i].gender, table[j].gender) == 0 && table[i].age == table[j].age && strcmp(table[i].zip_code, table[j].zip_code) == 0) { match++; } } if (match >= K) { count++; } } return count; }

int main() { Record table[] = { {"小明", "男", 25, "100086", "电子产品"}, {"小红", "女", 23, "100080", "化妆品"}, {"小白", "男", 27, "100081", "家用电器"}, {"小花", "女", 24, "100082", "图书"}, {"小李", "男", 26, "100083", "运动装备"}, {"小王", "女", 28, "100084", "饰品"}, {"小刘", "男", 29, "100085", "音乐"}, {"小张", "女", 30, "100086", "游戏"} }; int size = sizeof(table) / sizeof(Record); printf("原始数据表:\n"); print_table(table, size); anonymize_table(table, size); printf("\n匿名化后的数据表:\n"); print_table(table, size); int count = count_combinations(table, size); printf("\n每个准标识符属性值的组合至少出现%d次。\n", K); printf("数据表中有%d个这样的组合。\n", count); return 0; }


原文地址: https://www.cveoy.top/t/topic/nGiE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录