<PLC><汇川><算法>基于汇川PLC,实现给定数组的“子集求和”算法
前言
本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。
PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。
除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。
发文平台
CSDN
环境配置
系统:windows
软件:AutoShop
语言:梯形图、LiteST
库:相应PLC指令库、通用脚本
概述
本文使用汇川的Easy521系列的PLC,使用LiteST语言,实现以下功能:给定一个数组,一个目标数值,从数组中找到所有子集,子集的元素加起来等于目标值。
从算法上来说,这是一个比较经典的“子集求和”问题,可以使用递归或者动态规划来实现,但是汇川PLC中不支持递归,也不支持二维数组。因此需要其他方式,本文将介绍其中一种方式,即通过位运算来实现子集求和功能。
1、功能介绍
先介绍一下,我们以示例来说。假设我们有一个数组,如下:
【1、2、4、5、10、20、50】
数组元素不重复,且每个元素只能使用一次。
现在给定一个目标值,比如10,需要从数组中找出子集,子集的元素相加,其总和等于目标值。
示例中,如果要子集求和等于10,那么以下子集符合:
1、【1、4、5】
2、【10】
以上