词条 | 排列树 |
释义 | § 含义 排列是组合数学问题,而很多组合数学问题都可以在图之间进行转换。树是一种特殊的图。在这里我用一种特殊的树结构实现排列算法,这种树就是N层满N叉树(N可以是任意自然数)。图一就是一个三层满三叉树。它刚好有3层,并且除叶结点外每节点有3个儿子。利用这种树的性质我们很容易就能直观的获得一个3排列。[1] § 设计一个可排列的树形结构 根节点(000000) --第一层子节点1(000100) ----第二层子节点1(000101) ----第二层子节点2(000102) ----第三层子节点3(000103) --第一层子节点2(000200) ----第二层子节点1(000201) ----第二层子节点2(000202) ----第三层子节点3(000203) --第一层子节点3(000300) 如果按照这样的排列顺序插入数据库表里。通过dtree的js来实现,因为按照id,从数 据库取出来的记录集List已经是一个排列好了的结构,所以把List传到jsp页面,再循 环给dtree.add(id,name,parent),这样实现成树没有任何问题。 数据库表结构如下: id -- 记录id name -- 节点名称 parent -- 父节点id 现在如果希望把这颗树当中的节点的排列顺序做个调整,把第一层子节点1(000200)和 第一层子节点2(000200)的顺序对调。如: 根节点(000000) --第一层子节点2(000200) ----第二层子节点1(000201) ----第二层子节点2(000202) ----第三层子节点3(000203) --第一层子节点1(000100) ----第二层子节点1(000101) ----第二层子节点2(000102) ----第三层子节点3(000103) --第一层子节点3(000300) 这样dtree好像无法做到,想到的是把传给页面的List里已经排好了顺序,这样dtree 才能办到。问题是,现在如何设计数据库表,加个字段,这个字段放什么好,怎样才 能得到一个已经排列好了的List,List里面的对象顺序如下: 根节点(000000) --第一层子节点2(000200) ----第二层子节点1(000201) ----第二层子节点2(000202) ----第三层子节点3(000203) --第一层子节点1(000100) ----第二层子节点1(000101) ----第二层子节点2(000102) ----第三层子节点3(000103) --第一层子节点3(000300) § 关于系统排列 系统排列最早由德国的治疗师伯特海灵格创立而来。这种治疗方法里,会把个人放在一个更大的整体里面来观察,如家庭系统或一个组织,而不是把个人看做一个独立的实体。需要在这个整体中去理解个人的行为、感受和态度。在任何系统中,我们作为其中一员,那些家庭中的、组织里的潜藏的规则,在不知不觉中影响着我们的行为。让个案的案主从现场参与者中挑选代表,帮助他完成系统排列,以此把隐藏的系统能量挖掘出来。 § 举例 当所给问题的确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。排列树通常有n!个叶结点。因此遍历排列树需要奥秘加(n!)计算时间。旅行售货员问题的解空间是一棵排列树。 回溯法搜索排列树的算法一般可以描述如下: void backtrack(int t) { if (t > n) output(x); else for (int i = t; i < n; i++) { swap(x[t], x[i]); if (constraint(t) && bound(t)) backtrack(t + 1); swap(x[t], x[i]); } } |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。