kSumII

结合前面的permutation和combination的DFS来解这道题。

再看看自己都错在哪里了!!!

/**

     * @param A: an integer array.
     * @param k: a positive integer (k <= length(A))
     * @param target: a integer
     * @return a list of lists of integer 
     */ 
    
    public ArrayList<ArrayList<Integer>> kSumII(int []A, int K, int target) {
        ArrayList<ArrayList<Integer>> results = new ArrayList<>();
        if (A == null || A.length < K) {
            return results;
        }
        Arrays.sort(A);
        kSumIIHelper(A, K , target, results, new ArrayList<Integer>(), 0);
        return results;
    }
    
    private void kSumIIHelper(int []A, int K, int target, ArrayList<ArrayList<Integer>> results, ArrayList<Integer> list, int index) {
        if (list.size() == K) {
            if (target == 0) {
                //2 results.add(list);
                results.add(new ArrayList<Integer>(list));
            }
            return;
        }
        for (int i = index; i < A.length; i++) {
            list.add(A[i]);
            //3 kSumIIHelper(A, K - 1, target - A[i], results, list, i + 1);
            kSumIIHelper(A, K, target - A[i], results, list, i + 1);
            //1 lsit.remove(list.size() - 1);
            list.remove(list.size() - 1);
        }
    }
### PI、II、PID 控制原理及应用 #### 一阶比例积分 (PI) 控制器 在一阶比例积分控制器中,控制信号由两部分组成:比例项和积分项。比例项用于立即响应误差,而积分项则累积过去的误差以消除稳态偏差。 \[ u(t)=K_p e(t)+\frac{K_i}{s}e(t)\tag{1}\label{eq:pi_controller} \] 其中 \( K_p \) 是比例增益, \( K_i \) 积分增益, 而 \( e(t) \) 表示设定值与实际测量之间的差异[^3]。 对于离散时间系统而言,可以采用如下形式: ```matlab % MATLAB code snippet for a discrete-time PI controller implementation function control_signal = piController(error, kp, ki, dt) persistent integral_sum; if isempty(integral_sum) integral_sum = 0; % Initialize the integrator sum to zero on first call. end proportional_term = kp * error; integral_sum = integral_sum + error*dt; integral_term = ki * integral_sum; control_signal = proportional_term + integral_term; end ``` #### 双重积分 (II) 控制器 双重积分控制器不仅考虑当前时刻的误差及其历史记录,还进一步考虑到这些误差随时间变化的趋势。这有助于提高系统的动态性能并减少超调现象的发生。 \[ G_{ii}(s)=\left(\frac{k_1 s+k_2}{T_is+s}\right)^2=\frac{(k_1 T_i s+k_2 )^2 }{{(T_i s)} ^2 }\tag{2}\label{eq:ii_controller} \] 这里引入了一个额外的时间常数 Ti 来调整频率特性,使得低频范围内的相位裕度得到改善[^4]。 然而,在实践中较少单独使用 II 型调节器;通常会与其他类型的补偿机制相结合形成更复杂的控制系统结构。 #### 比例-积分-微分 (PID) 控制器 PID 控制器是最常用的反馈回路组件之一,它综合了三种不同的作用方式——即时的比例反应、过去行为的记忆(通过积分),以及对未来趋势预测的能力(借助于导数)。其传递函数可表示为: \[ C(s)=K_p+\frac{K_i}{s}+K_ds\tag{3}\label{eq:pid_controller} \] 在数字实现方面,则可以通过以下算法近似计算连续域中的 PID 功能: ```c++ // C++ code snippet demonstrating how one might implement a simple digital PID loop double pidControl(double setpoint, double measuredValue, double KP, double KI, double KD, double dt){ static double prevError = 0.0f; static double integralTerm = 0.0f; double error = setpoint - measuredValue; integralTerm += error * dt; double derivativeTerm = (error - prevError)/dt; prevError = error; return(KP*error + KI*integralTerm + KD*derivativeTerm); } ``` 这种组合提供了强大的工具来优化各种工业过程自动化场景下的闭环稳定性和平滑过渡表现[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值