的最佳算法目前市面上的“亲属关系”算法主要采用头衔-直系关系-头衔的方式求数据结构'爸爸':{'爸爸':'爷爷','妈妈':'外婆','弟弟':'叔叔','弟弟':'叔叔','妹妹':'阿姨','妹妹':'阿姨','老公':'不详','wife':'mother','son':{'older':'brother','middle':'me','younger':'brother'},'daughter':{'older':'sister','middle':'I','younger':'sister'}}这种结构主要存在以下问题:1.无法直接查询“阿姨的婆婆”等复合关系;2、标题不能反写,如:“表兄弟的妈妈的妈妈是‘阿姨’、‘阿姨’还是‘阿姨’?”3、数据结构不好,数据臃肿。后续会有多个“未知”4.不能兼容多个称呼,比如:“爸爸”也可以叫“爸爸”“爸爸”5.不能进行关系拓扑,比如:What“阿姨”和我是什么关系?而我的这套算法只使用:关系链-称谓集合法查找演示地址:相对称谓计算器项目地址:https://github.com/mumuy/relationship/datastructure'h':['husband','husband','先生','官','男人','男人','老公','老公','嫂子','老公','情人','老婆'],'h,f':['长辈','翁钦','老爹'],每个标题都能找到对应的关系链,每个关系链同时有对应的一组标题,这里需要介绍一下你自己“发明”的特殊语法标记语法说明[Relationship]f:father,m:mother,h:husband,w:wife,s:son,d:female,xb:brother,ob:brother,lb:弟弟,xs:姐姐,os:姐姐,ls:姐姐【修饰符】1:男,0:女,&o:年长,&l:年幼,#:分,[a|b]:并列如:“f”对应爸爸,则:“f,m”对应外婆,“f,f”对应外公;这样,在查询关系时,只需要计算关系链,而不需要对标题进行字典查找算法思路1,当用户输入“阿姨婆婆”时,可以分解为两个对象“阿姨”和“婆婆”(前婆婆)2、从“关系链-标题集合”的映射关系来看,这两个对象的关系链为:“m,xb,w”和“h,m”,合并后的关系为:“m,xb,w,h,m”3、此时关系链会冗余,如:“w,h”表示“妻子的丈夫”,也就是我自己!关系链可以直接简化为:“m,xb,m”。同理,又出现了一层冗余,“xb,m”的意思是“兄弟的妈妈”,也就是自己的妈妈!所以关系链可以进一步简化为:“m,m”4、此时将复杂的关系链转化为直接关系,直接查询“关系链-标题集合”的映射关系很容易1."关系链-标题"集合"映射关系可以用JSON对象的键值对来表示,即属性是一个对应关系链,值是标题的集合。键值pair的优点是查询速度快2.关系链的简化计算可以通过正则匹配来实现,规则只需要考虑两层关系的简化,多次处理直到不能再被简化。比如:父亲的妻子是母亲,兄弟的父亲是父亲,妻子的丈夫是自己等等。当然,在简化过程中需要考虑性别,有多种可能。例如:儿子的母亲,当你是男人时,代表你;妻子,当你是女人时,代表你自己;一个母亲的儿子,可能是你,也可能是你的兄弟,但当你是女人的时候,就只能是你的兄弟。这些都是去匹配正则表达式中的条件,然后替换处理!这就是为什么在您自己的语法标签中引入[修饰符]的原因。'#':分隔,分隔整个关系链'[a|b]':并列,分隔关系链中的单个节点
