有一组赋值操作表达式,比如:
valu1 = 1;
valu2 = 2;
valu3 = 3;
valu4 = valu1;
valu5 = valu1;
valu6 = valu4;
valu8 = valu7;
valu9 = valu2;
valu10 = valu8;
…………….
以上表达式的操作结果应该是:
valu1,valu4,valu5,valu6 = 1;
valu2 ,valu9= 2;
valu3 = 3;
valu7,valu8,valu10 = 未赋值;
实现:编写程序预测一组赋值操作表达式的执行结果,分组返回有相同值的变量名及值结果。
要求:注意程序的正确性、稳定性和执行效率。
/********************************************************************************/
纯粹的算法设计题目,我个人觉得有些难度,贴出来请大伙多指点

解决方案 »

  1.   

    做nameclass,valueclass。每个valueX创建一个nameclass,创建一个hash,每个负值过的nameclass连接到保存值的valueclass,并且放入hash,每个新value处理时,查找hash获得=右边的valueclass并且取出值,赋予新nameclass,这里可以传送引用也可以按值传送。加入hash.最后,扫描一遍hash就出来了。如果想不扫描,将valueclass做成dictionary,dic值做成个nameclass连表。
      

  2.   

    数据结构很简单
      节点{key, type, value} key:关键字  type:枚举{未定|地址|数值}  value:{数值|地址}算法
    while(有节点)
    {
        call NodeFunc(节点) //处理节点
    }function NodeFunc(节点)
    {
        if (节点.type == 未定) return null; //防止类似 a=b b=c c=a 的循环定义,导致递不归    if (节点.type == 地址)
           {
             节点.type = 未定
             节点.value = NodeFunc(节点.value)
             节点.type = 数值
           }
        else
           {
              return 节点.value;
           }
    }
      

  3.   

    其实这个算法在很多BBS里面都会用到
      

  4.   

    呵 .对楼上的两位深表感谢..:) 
    继续讨论..
    /**********************************
    jamesfay(James Fay)定义的数据结构中,为防止循环定义使用了if (节点.type == 未定) return null;
    个人感觉没有必要,当出现变量对变量之间的赋值如valu2=valu1的操作时候,此时valu1如不是一个已知的值(地址)可返回为valu1=valu2=未初始化。
    /**********************************
    个人见解,有不对的地方,请多指教ps:楼下的讨论时候能否给出伪码算法.。本人想偷懒  :)
      

  5.   

    psn(psn)的数据结构中,对相同值的hash比如{valu1=3;valu3=3;valu4=3;...}可否有更高效一些的搜索算法
      

  6.   

    来个另类的!!:
    没有算法!
    在oracle建表:
    value_id value_name father_id然后利用oracle的关系查询!好象是startwith关键字 ^_^
      

  7.   

    我们可否偷学oracle的查询算法..效率一定很高哦..