更新:
First, please ask yourself whether thisdata structure and algorithm are suitable for 10K level data handling, andwhether there are abnormal case need to be considered.
Then, refine your idea and solution.
在数据量特别大的时候,有可能出现内存无法加载所有数据的情况。即在整个链表初始化,或者添加新的数据的时候,出现分配内存的错误。
struct user{
int data;
}
struct group{
int data;
char *file_path;
struct group *g_next;
}
可以考虑把每个group的从属数据放到一个文件中,然后把文件映射到内存中,进行类似处理。
原始:
有group和user两种实体:
User和group是从属关系, user可以从属于任意多个group,group也可以从属于任意多个group; 每种实体都有数量很多的对象;
用有向图来表示上述,U表示User, G表示group。
如何使用数据结构(C语言)描述上面的关系?
struct user{
int data;
int reference;
struct user *u_next;
}
struct group{
int data;
struct group *g_next;
struct user *u_next;
}
给定一个user和group,如何根据你所组织的结构判定是否存在从属关系?判定过程的时间复杂度如何?
从head指针出发,找到相应的group,然后从group下查找user。判断过程的复杂度主要取决于group的数量。
如果删除一个user,如何调整你的组织结构?如果删除一个group呢?
删除user:
从head出发,在G1中查找user,如果找到user,则删除该user, 检查reference值,为1则释放该user,退出,不为1则reference减去1。如果遍历到结束也找不到给user,则到G2,G3…中查找user,找到则删除,并检查reference值,如果为1,则释放该user。
删除group:
从head出发,在G1, G2…中查找group,如果找到,则与删除user一样,删除group。然后在主表中删除group,检查该group下user的reference值,如果为1,则删除。
如果删除一对user和group的从属关系,如何调整你的组织结构?
从head出发,找到指定的group和user,从该group中删除该user,同时检查reference值,如果该user的reference值为1,则释放该user,否则reference减去1.
如果删除一对group和group的从属关系,如何调整你的组织结构?
从head出发,找到相应的group和group,把从属的group删除。
本文探讨了在处理大量数据时,数据结构和算法的优化策略。包括内存管理、文件映射技术,以及如何在复杂关系中高效地查找、添加、删除实体之间的从属关系。同时,提供了解决方案来应对内存不足的问题,并详细阐述了数据结构的实现和相关操作的时间复杂度。
872

被折叠的 条评论
为什么被折叠?



