首页 > 数据库技术 > 详细

pl/sql实现排列组合(非递归)

时间:2016-02-04 10:39:19      阅读:198      评论:0      收藏:0      [点我收藏+]

项目中有时候需要随机条件的组合来做分析,排列组合可以保证不遗漏什么条件,下面是一个用pl / sql 实现的排列组合. 

procedure zuhe(n      number,
                   arrvar out t_arrchar) is
    idx number;
    m   number;
    x   number := 1;
    type arrayty is table of number index by binary_integer;
    -- nlarr nlarrarty;
    -- arr arrayty;
    p    arrayty;
    a    arrayty;
    tmps varchar2(1000);
  begin
    for i in 1 .. n
    loop
      a(i) := i;
    end loop;
    for i in 1 .. n
    loop
      p(i) := i;
    end loop;
    for i in 0 .. n
    loop
      m := i;
      begin
        idx := 1;
        p(idx) := 1; --//取第一个元素
        while (true)
        loop
          if (p(idx) > n) then
            --//取到底了,回退
            if (idx = 1) then
              --//各种情况取完了,不能再回退了
              exit;
            end if;
            --}
            idx := idx - 1; --;//回退到前一个
            p(idx) := p(idx) + 1; --//替换元素       
            --   }
          elsif (idx = m) then
            --//取够了,输出
            for i in 1 .. m
            loop
              tmps := tmps || to_char(a(p(i)));
            end loop;
            arrvar(x) := tmps;
            tmps := null;
            p(idx) := p(idx) + 1; --//替换元素   
            x := x + 1;
          else
            --{//多取一个元素
            idx := idx + 1;
            p(idx) := p(idx - 1) + 1;
            --}
          end if;
        end loop;
      end;
    end loop;
    /*  for i in 1 .. arrvar.count
    loop
    dbms_output.put_line(to_char(arrvar(i)));
    end loop;*/
  end;

pl/sql实现排列组合(非递归)

原文:http://www.cnblogs.com/wangxingc/p/5181076.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!