zoukankan      html  css  js  c++  java
  • 状态压缩类动态规划(参考小蓝书的总结)

    状态压缩类动态规划

    一、问题简介

    基于状态压缩的动态规划,又叫集合动态规划,顾名思义,这是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划和基于连通性状态压缩的动态规划两种。

    如果有许多元素的状态都直接影响到决策,都需要被考虑到,为每一个 元素的状态都开一维数组来存储显然是行不通的,于是就需要有一种便于识别和操作的方式记录下各个元素的状态,即对多个元素的状态进行压缩存储,于是基于状态压缩的动态规划应运而生。

    二、特点

    我们通常把这样一类以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为基于状态压缩的动态规划或集合动态规划。基于状态压缩的动态规划问题通常具有以下两个特点。

    ①数据规模的某一维或几维非常小。

    ②它需要具有动态规划问题的两个基本性质:最优性原理和无后效性。

    三、预备知识

    位操作是一种速度非常快的基本运算:有左移、右移、与、或、非等运算。

    左移:左移一位,相当于某数乘以2,比如110左移1位变为1100<=>6变为12,表示为(110 << 1) = 1100,因此左移x位相当于该数乘以2^x。

    右移:右移一位,相当于某数除以2,比如110右移1为变为11<=>6变为3,表示为(110 >> 1) = 11,因此右移x位相当于该数除以2^x。

    与运算:按位进行“与”运算,两数同一位都为1时结果为1,否则为0。例如101 & 100 = 100

    或运算:按位进行“或”运算,两位同一位都为0时结果为0,否则为1.例如101|100 = 111

    非运算:按位取反。例如~101 = 010.

    若当前状态为s,对s有下列操作。

    ①判断第i位是否为0:(S & (1 << i))== 0,意思是将1左移i位与S进行与运算后,看结果是否为零。

    ②将第i位设置为1:S| (1 << i),意思是将1左移i位与S进行或运算。

    ③将第i位设置为0:S & ~(1 << i),意思是将S与第i位为0,其余位为1的数进行与运算;

    例如S= 1010101,i = 5

    (S & (1 << i)):1010101 &0100000 = 0000000

    S| (1 << i): 1010101 | 0100000 = 1110101

    S & ~(1 << i) : 1010101 & 1011111 = 1010101

  • 相关阅读:
    面试常考点:http和https的区别与联系
    常见的反爬虫和应对方法
    2019/1/1 Python今日收获
    2018/12/26,12/27 Python今日收获
    2018/6/7-6/8 Python今日收获
    2018/6/6 Python今日收获
    CSS(3)——visited伪类
    CSS中margin和padding的区别
    CSS(2)——CSS的文字,边框,背景与列表
    CSS(1)——CSS的引入方式与选择器
  • 原文地址:https://www.cnblogs.com/rax-/p/9904138.html
Copyright © 2011-2022 走看看