新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Java/Eclipse 』 → 源码查错 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2906 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 源码查错 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     KEVIN1050 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:75
      门派:XML.ORG.CN
      注册:2007/9/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给KEVIN1050发送一个短消息 把KEVIN1050加入好友 查看KEVIN1050的个人资料 搜索KEVIN1050在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看KEVIN1050的博客楼主
    发贴心情 源码查错

    JAVA才学了几天就开始学数据结构,这个程序怎么看都看不懂哪里出错了,能否帮忙指正一下?

    不胜感激!

    import java.until.random;
    class SequenceAlignment1{
      /*

        using main with two command line arguments will align the
        arguments with minimum cost according to the meassure +1 for
        mismatches and indels, 0 for matches.
        
       */
    private string[] character=[ A ,R, N, D, C, Q, E, G, H, I, L, K, M, F, P, S, T, W, Y,V];
    private int[][] scores =
                /* A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V */
      { /* A */ {  5                                                          },
        /* R */ { -2, 7                                                       },
        /* N */ { -1,-1, 7                                                    },
        /* D */ { -2,-2, 2, 8                                                 },
        /* C */ { -1,-4,-2,-4,13                                              },
        /* Q */ { -1, 1, 0, 0,-3, 7                                           },
        /* E */ { -1, 0, 0, 2,-3, 2, 6                                        },
        /* G */ {  0,-3, 0,-1,-3,-2,-3, 8                                     },
        /* H */ { -2, 0, 1,-1,-3, 1, 0,-2,10                                  },
        /* I */ { -1,-4,-3,-4,-2,-3,-4,-4,-4, 5                               },
        /* L */ { -2,-3,-4,-4,-2,-2,-3,-4,-3, 2, 5                            },
        /* K */ { -1, 3, 0,-1,-3, 2, 1,-2, 0,-3,-3, 6                         },
        /* M */ { -1,-2,-2,-4,-2, 0,-2,-3,-1, 2, 3,-2, 7                      },
        /* F */ { -3,-3,-4,-5,-2,-4,-3,-4,-1, 0, 1,-4, 0, 8                   },
        /* P */ { -1,-3,-2,-1,-4,-1,-1,-2,-2,-3,-4,-1,-3,-4,10                },
        /* S */ {  1,-1, 1, 0,-1, 0,-1, 0,-1,-3,-3, 0,-2,-3,-1, 5             },
        /* T */ {  0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 2, 5          },
        /* W */ { -3,-3,-4,-5,-5,-1,-3,-3,-3,-3,-2,-3,-1, 1,-4,-4,-3,15       },
        /* Y */ { -2,-1,-2,-3,-3,-1,-2,-3, 2,-1,-1,-2, 0, 4,-3,-2,-2, 2, 8    },
        /* V */ {  0,-3,-3,-4,-1,-3,-3,-4,-4, 4, 1,-3, 1,-1,-3,-2, 0,-3,-1, 5 }
                /* A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V */
      };
      int convert(string x)
      { /* A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V */

      int index;
      switch(x){
      case A: index=0;break;
      case R: index=1;break;
      case N: index=2;break;
      case D: index=3;break;
      case C: index=4;break;
      case Q: index=5;break;
      case E: index=6;break;
      case G: index=7;break;
      case H: index=8;break;
      case I: index=9;break;
      case L: index=10;break;
      case K: index=11;break;
      case M: index=12;break;
      case F: index=13;break;
      case P: index=14;break;
      case S: index=15;break;
      case T: index=16;break;
      case W: index=17;break;
      case Y: index=18;break;
      case V: index=19;break;
      default:break;
      }
      return a;
      }
      int getscore(string a,string b){
      int i,j;
      i=convert(a);
      j=convert(b);
      if(score)
      score=scores[i][j];
      else
      score=scores[j][i];
      }
        public static void main(String[] args){
        /*SequenceAlignment1 sa1 = new SequenceAlignment1(string[] cmdLn);
        String[] res = sa1.getAlignment();
        System.out.println(sa1.getValue());
        System.out.println(res[0]);
        System.out.println(res[1]);*/
        
        Random generator=new Random();
        //int r=generator.nextInt();
        for(int j=0;j<cmdLn.length;j++){
        int randomIndex=generator.nextInt(19);
        string b;
        b=character[randomIndex];
        }
        
        
        String xs, ys; // the seqs to be aligned.
        int n, m;      // their lengths.
        int[][] M;     // the matrix used to compute the optimal values
        Coord[][] traceback;
        
        public SequenceAlignment1(String a, String b){
        xs = a;
        ys = b;
        n = a.length();
        m = b.length();
        M = new int[n+1][m+1];

        traceback = new Coord[n+1][m+1];

        for(int i = 1; i<=n; i++){
            M[i][0] = i*(-8);
            traceback[i][0]=new Coord(i-1,0);
        }

        for(int j = 1; j<=m; j++){
            M[0][j] = j*(-8);
            traceback[0][j]=new Coord(0,j-1);
        }
        
        for(int i = 1; i<=n; i++)
            for(int j = 1; j<=m; j++){
            M[i][j] = max(M[i-1][j-1]+d(xs.charAt(i-1),ys.charAt(j-1)),
                      M[i-1][j]-8,
                      M[i][j-1]-8);
            if(M[i][j] == M[i-1][j-1]+d(xs.charAt(i-1),ys.charAt(j-1)))
                traceback[i][j] = new Coord(i-1,j-1);
            else if (M[i][j]==M[i-1][j]-8)
                traceback[i][j] = new Coord(i-1,j);
            else traceback[i][j] = new Coord(i,j-1);
            }
        }
        

      public int getValue(){return M[n][m];}


      public String[] getAlignment(){
        Coord tb = new Coord(n,m);
        StringBuffer res1 = new StringBuffer();
        StringBuffer res2 = new StringBuffer();
        int i = tb.i;
        int j = tb.j;
        tb=traceback[n][m];
        while(tb!=null){
          if(i==tb.i)res1.append('-');
          else res1.append(xs.charAt(i-1));
          if(j==tb.j)res2.append('-');
          else res2.append(ys.charAt(j-1));
          i=tb.i;
          j=tb.j;
          tb = traceback[i][j];
        }
        String[] res = {res1.reverse().toString(),res2.reverse().toString()};
        return res;
      }

        private static final int min(int a, int b, int c){
        return Math.min(a,Math.min(b,c));
        }
         
          private static final int max(int a, int b, int c){
        return Math.max(a,Math.max(b,c));
        }
        

        // The distance function:
        private static final int d(char a, char b){
        return a==b?0:1;
        }


    }

    class Coord{
      int i, j;
      Coord(int x, int y){
        i=x;j=y;
      }
    }

    用JAVA程序,从命令行读取两个字符串,输出这两个输入的最优(佳)对比的花费(COST)和输出有着最优分数的对比(alignment)

    要求用动态规划(dynamic programming)


    有着最优分数(score)的一个对比(alignment)是:当对比两个各自都允许间隙(gap)的字符串时,有着最大分数(score)的对比.通过一个分数矩阵来表示字母(letter)对比的花费.假设一个间隙(gap)的花费是-8.两个字符串对比的花费是各自位置的花费的总和.


    应该测量执行时间(execution time),并生成一个包含有测量及结论的文件.表示你应该写一个程序,测试序列对比中的输入(input)的大小,必须提供计算执行时间的证据

    原文:
    Write a java program that reads two strings from the command line and outputs the cost of an optimal alignment for the two inputs as well as one alignment with the optimal score.

    The program should implement a dynamic programming algorithm.


    hits:
    An alignment with optimal score is one that maximizes the total score when aligning two strings alowing gaps in both strings. The cost for aligning letters is given by a score matrix 。Assume that the cost of introducing a gap is -8. The cost for the alignment of the two strings is the sum of the costs at each possition.

    You should meassure the execution time of your implementation and produce the file with your meassurements and conclusions. This means that you should write a program that tests sequence alignment for some sizes of the input and that you should provide experimental evidence for the calculated asymptotic execution time

    谢谢


    [此贴子已经被作者于2007-10-1 18:50:09编辑过]

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/9/30 9:39:00
     
     KEVIN1050 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:75
      门派:XML.ORG.CN
      注册:2007/9/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给KEVIN1050发送一个短消息 把KEVIN1050加入好友 查看KEVIN1050的个人资料 搜索KEVIN1050在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看KEVIN1050的博客2
    发贴心情 
    翻译:

    用JAVA程序,从命令行读取两个字符串,输出这两个输入的最优(佳)对比的花费(COST)和输出有着最优分数的对比(alignment)

    要求用动态规划(dynamic programming)

    有着最优分数(score)的一个对比(alignment)是:当对比两个各自都允许间隙(gap)的字符串时,有着最大分数(score)的对比.通过一个分数矩阵来表示字母(letter)对比的花费.假设一个间隙(gap)的花费是-8.两个字符串对比的花费是各自位置的花费的总和.


    应该测量执行时间(execution time),并生成一个包含有测量及结论的文件.表示你应该写一个程序,测试序列对比中的输入(input)的大小,必须提供计算执行时间的证据

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/9/30 13:13:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/26 12:54:28

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms