今天有人在群里问了这样一个问题,一个内表有2个字段:f1和f2,每个条目代表物料f1消耗了f2。有一种可能是,f1消耗了f2,f2直接或间接又消耗了f1,形成一种递归关系。
现在希望找出内表中所有的这种物料,因为这些物料对成本分摊有不良影响。比如:[a,b] [b,c] [a,d] [b,d] [c,a];则结果包含a,b,c,不包含d。乍一看需求有点晕,仔细一想,其实就是将内表中所有条目,两两之间进行运算而已。
程序思路:每次取内表中的一个条目,将它与内表中位于其前面的所有条目进行运算;运算过程中,如果生成了新对应关系,则将其添加到内表后面(也等待着与内表中所有条目进行运算);如此循环……等到内表循环结束,所有可能的对应关系,自然都被考虑到了。

DATA: BEGIN OF wa1,
        f1 TYPE c,
        f2 TYPE c,
      END OF wa1.

DATA: wa2 LIKE wa1,
      tabix LIKE sy-tabix,
      itab LIKE TABLE OF wa1 WITH HEADER LINE,
      itab2 TYPE TABLE OF c WITH HEADER LINE.

itab-f1 = 'a'.
itab-f2 = 'b'.
APPEND itab.
itab-f1 = 'b'.
itab-f2 = 'c'.
APPEND itab.
itab-f1 = 'a'.
itab-f2 = 'd'.
APPEND itab.
itab-f1 = 'b'.
itab-f2 = 'd'.
APPEND itab.
itab-f1 = 'c'.
itab-f2 = 'a'.
APPEND itab.

LOOP AT itab INTO wa1.
  tabix = sy-tabix - 1.
  LOOP AT itab INTO wa2 TO tabix.
    IF wa2-f2 = wa1-f1. "运算一
      READ TABLE itab WITH KEY
        f1 = wa2-f1 f2 = wa1-f2.
      IF sy-subrc <> 0.
        IF wa2-f1 = wa1-f2.
          APPEND wa2-f1 TO itab2. "存到结果表
        ELSE.
          itab-f1 = wa2-f1.
          itab-f2 = wa1-f2.
          APPEND itab. "添加新对应关系到内表
        ENDIF.
      ENDIF.
    ENDIF.
    IF wa2-f1 = wa1-f2. "运算二
      READ TABLE itab WITH KEY
        f1 = wa1-f1 f2 = wa2-f2.
      IF sy-subrc <> 0.
        IF wa1-f1 = wa2-f2.
          APPEND wa1-f1 TO itab2. "存到结果表
        ELSE.
          itab-f1 = wa1-f1.
          itab-f2 = wa2-f2.
          APPEND itab. "添加新对应关系到内表
        ENDIF.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDLOOP.

SORT itab2.
DELETE ADJACENT DUPLICATES FROM itab2.
LOOP AT itab2. "输出结果表
  WRITE: / itab2.
ENDLOOP.
LOOP AT itab. "输出所有对应关系作参考
  WRITE: / itab-f1, itab-f2.
ENDLOOP.


程序运行过程:
1,[a,b][b,c][a,d][b,d][c,a],他们相互间运算完毕后,生成了新对应关系[a,c][c,b][b,a][c,d];
2,[a,c][c,b][b,a][c,d]这些新对应关系与老对应关系两两运算,同时相互间也两两运算,生成了新对应关系[c,c][a,a][b,b]。这是特殊的对应关系(即递归关系),它们不需要重新参与运算,直接写到了我们的结果表。

由于没有新对应关系的生成,程序运行完毕,结果表中形成了a,b,c三条记录。

ABAP算法:找出递归的物料相关推荐

  1. 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...

    现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数. 方法1:Hash链表 方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数.开始时将B初始化为0 ...

  2. 知哈希算法——找出相似的图片

    知哈希算法--找出相似的图片 感知哈希算法--找出相似的图片 - Create Chen - 博客园 知哈希算法--找出相似的图片 Google 图片搜索功能 在谷歌图片搜索中, 用户可以上传一张图片 ...

  3. python 频繁项集_用FP-Growth算法找出销售数据中的频繁项集

    运行环境 python3.7.PyCharm 2018.2.4 (Community Edition) 数据来源 思路 从所给数据及其说明文档可以看出此数据集是从购物数据中收集而来的,每行数据都是一条 ...

  4. c语言 判断互质,[经典算法] 找出某数以内与其互质的数

    起因:前几天做了一个这样的题目,感觉自己变成了一个智障,来写写算法: 相关定义: ①质数定义:没有除 '1' 以外的因子的数就是质数.如:1.3.5.7.11等等. ②互质定义:两个数之间除 '1'  ...

  5. Apriori算法找出频繁项集(python)

    目标 数据库有5个事务.设min_sup=60%,min_conf=80%. TID 购买的商品 T100 {M,O,N,K,E,Y} T200 {D,O,N,K,E,Y} T300 {M,A,K,E ...

  6. python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...

    本文实例讲述了Python找出序列中出现次数最多的元素.分享给大家供大家参考,具体如下: 问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是 ...

  7. 算法---找出第 N 个二进制字符串中的第 K 位(Kotlin)

    题目 给你两个正整数 n 和 k,二进制字符串 Sn 的形成规则如下: S1 = "0" 当 i > 1 时,Si = Si-1 + "1" + reve ...

  8. 感知哈希算法——找出相似的图片

    参考Neal Krawetz博士的这篇文章, 实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格 ...

  9. 【转】感知哈希算法——找出相似的图片

    Google 图片搜索功能 在谷歌图片搜索中, 用户可以上传一张图片, 谷歌显示因特网中与此图片相同或者相似的图片. 比如我上传一张照片试试效果: 原理讲解 参考Neal Krawetz博士的这篇文章 ...

最新文章

  1. 主席树 | 莫队 ---- Codeforces Round #716 (Div. 2) D. Cut and Stick [主席树or莫队优化] 区间众数问题(静态)
  2. C# 垃圾回收机制(转)
  3. 学习事务,视图和索引
  4. Java监听器Listener入门示例
  5. vue 动态添加class_前端开发:Vue项目实战-Music
  6. 人工智能已经迫在眉睫_创意计算机已经迫在眉睫
  7. 最优化学习笔记(九)——基本的共轭方向算法
  8. IAR 下根据官方库建立 STM32的工程
  9. mysql 只读权限 不能访问函数_通用mysql只读函数
  10. C# 数据类型转换
  11. 【干货】B站品牌营销指南.pdf(附100页pdf下载链接)
  12. 最新升学e网通JS逆向分析
  13. Composer Player 属性设置
  14. python怎样画立体图-Python学习(一) —— matplotlib绘制三维轨迹图
  15. 软件工程毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  16. jquery form表单提交
  17. Session的活化与钝化
  18. 搭建普罗米修斯Prometheus监控系统
  19. 一位老先生对年轻人不得不说的十大忠告〔转〕
  20. 虚拟主机商如何搭建下一代虚拟主机

热门文章

  1. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.17 技巧:使用多个列
  2. Linux 基础学习(第一节)
  3. Android Activity启动模式总结
  4. Android Service(7)--完结篇
  5. GARFIELD@07-02-2005
  6. Android四层架构
  7. Room是怎样和LiveData结合使用的?(源码分析)
  8. 众星出席2018—2019中国文娱金数据发布盛典
  9. qmake, makefile, make是什么东东,makefile简介!
  10. Ubuntu 软件包管理APT