读书人

算法有关问题

发布时间: 2012-03-26 15:46:56 作者: rapoo

算法问题
struct
{
int id;
int par;
int state;
};

如上,结构体有N多字段,主要的有以上三个,
一个标识自己,一个标识他所依赖的,
一个是状态(ON/OFF).如果将一个数据的状态置为OFF,那么依赖他的所有数据都自动置为OFF


数据大约十万条.
如何设计算法及数据结构,
能使置为OFF效率高.

谢谢

[解决办法]
struct
{
int id;
int par;
int state;
};

可以使用hash表存储,key为id,
一个对象off的时候,取出他的par,作为查询id直接定位到下一个需要off的对象
设置它的状态,一直继续这个步骤直到结束。。。。
[解决办法]
可以分析一下这个依赖关系

如果它是1对1,以链状存在,那么就取链表;
如果是n对1,以树状存在,那么就是树;
如果n对n,那就用图

当状态改变时,其实就是根据依赖关系,进行链表/树/图的遍历...
[解决办法]
如果能为每条数据构造它所依赖的数据列表,就直接通过这个列表定位它所依赖的数据。
当然遍历所有的数据一遍也是可以的,看它的依赖字段等于M,表示依赖M,置为off就行。
还可以把所有的数据按依赖字段排序,这样最后按依赖的顺序,想置位依赖M的off,直接二分查找par字段,就可以将那些置为off。
[解决办法]
你实际物理存储建议采用数组,用数组来实现查找用的二叉树,还有链表,至于改变状态,你可以在结构体里增加二个指针域,一个用来做为依赖于此结点的其它结点链表头指针,链接所有依赖的于它结点,将新结点插入链表头。另外一个指针,指向它所依赖的结点链表的前一结点。这样就能将所有的结点链接到一起,置off只是对这个链接表的遍历。

读书人网 >C++

热点推荐