【2.20】动态规划 +项目 + 存储引擎

news2024/9/20 11:02:10

01背包问题

现有一容量为w的背包,有3个物品,每个物品重量不同,价值不同,问,怎样装才能价值最大化?

  1. 明确dp数组含义和下标含义:dp[j]表示当前背包的最大价值。j表示背包容量。
  2. 递推公式:dp[j] = Math.max(dp[j] , dp[j - weight[i]] + values[i])。dp[j]就是不放i物品时的最大价值,dp[j - weight[i]] + values[i]就是放i物品时的最大价值。
  3. 初始化:当背包容量为0,物品最大价值也为0。dp[0] = 0。
  4. 确定遍历顺序:先遍历物品,后遍历容量。并且倒序遍历背包容量,保证每个物品只被放入一次。

LeetCode

  • leetcode416

    把数值问题换算为背包问题。

    只有确定了如下四点,才能把01背包问题套到本题上来。

    • 背包的体积为sum / 2
    • 背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
    • 背包如果正好装满,说明找到了总和为 sum / 2 的子集。
    • 背包中每一个元素是不可重复放入。
    class Solution {
        public boolean canPartition(int[] nums) {
        /**
            dp[j] :元素的数值。(背包最大价值。)
            递推公式:
            dp[j] = Math.max(dp[j] , dp[j - nums[i]] + nums[i]);
            dp[0] = 0.
            遍历:外层遍历nums(物品),内层倒序遍历背包容量。
        */
        int sum = 0;
        for(int i : nums){
            sum += i;
        }
        //不符合条件
        if(sum % 2 == 1)
            return false;
        
        int len = sum / 2;
        int dp [] = new int [len + 1];
        dp[0] = 0;
        for(int i = 0; i < nums.length; i ++){
            for(int j = len; j >= nums[i]; j --){
                dp[j] = Math.max(dp[j] , dp[j - nums[i]] + nums[i]);
            }
        }
        return dp[len] == len ? true : false;
        }
    }
    
  • leetcode1049

    class Solution {
        public int lastStoneWeightII(int[] stones) {
            //将石头尽量分解为重量相同的两堆,剩下的就是最小的重量。
            /**
                dp[j] 为石头的最小重量 最小容量为 sum / 2
                石头重量、价值为stones[i]。
             */
             int sum = 0;
             for(int i : stones){
                 sum += i;
             }
             int len = sum / 2;
             int dp [] = new int [len + 1];
             dp[0] = 0;
             for(int i = 0 ; i < stones.length;i ++){
                 for(int j =  len; j >= stones[i];j --){
                     dp[j] = Math.max(dp[j] , dp[j - stones[i]] + stones[i]);
                 }
             }
            return sum - 2 * dp[len];
        }
    }
    

第五章:存储引擎(重点)

关于存储引擎的命令

  • 查看mysql提供什么存储引擎:

    show engines;
    
  • 查看默认的存储引擎:

    show variables like '%storage_engine%';
    #或
    SELECT @@default_storage_engine;
    
  • 修改默认的存储引擎

    SET DEFAULT_STORAGE_ENGINE=MyISAM;
    
  • 设置表的存储引擎

    ALTER TABLE 表名 ENGINE = 存储引擎名称;
    

引擎介绍

  • InnoDB引擎:在MySQL5.5版本之后默认使用。支持事务管理,可以确保事务的完整提交(commit)和回滚(rollback)。对比MyISAM,InnoDB写的处理效率差一些(保证事务完整性),不仅缓存索引,还缓存真实数据,对内存要求高。是处理海量数据量的最大性能设计。锁机制是行锁,操作时只锁一行,适合高并发的操作。支持外键。

  • MyISAM引擎:不支持事务、行锁、外键,并且崩溃后无法安全恢复。优点是访问快,对事务完整性没有要求或者以SELECT、INSERT为主(只读或以读为主)的应用可以使用。针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高。

  • 数据文件结构:InnoDB中,.frm存储表结构。(MySQL8.0合并到.ibd).ibd存储数据和索引。MyISAM中,表名.frm 存储表结构;表名.MYD 存储数据 (MYData);表名.MYI 存储索引 (MYIndex)

  • InnoDB和MyISAM对比

在这里插入图片描述

数据字典总体流程

前端页面定位url:“/dict/findZnodes”,到web-admin(消费端)中的DictController。

DictController调用方法:

@Reference
    private DictService dictService;

@GetMapping(value = "findZnodes")
    //将返回值转化为JSON
    @ResponseBody
    public Result findByParentId(@RequestParam(value = "id", defaultValue = "0") Long id) {
        List<Map<String,Object>> zNodes = dictService.findZnodes(id);
        return Result.ok(zNodes);
    }

DictController中使用了dictService.findZnodes(id),在服务端service-house中,DictServiceImpl方法

@Autowired
    private DictDao dictDao;
    @Override
    public List<Map<String,Object>> findZnodes(Long id) {
        // 返回数据[{ id:2, isParent:true, name:"随意勾选 2"}]


        //根据父节点id获取子节点数据
        List<Dict> dictList = dictDao.findListByParentId(id);
        //构建ztree数据
        List<Map<String,Object>> zNodes = new ArrayList<>();
        for(Dict dict : dictList) {
            //判断该节点是否是父节点
            Integer count = dictDao.countIsParent(dict.getId());
            Map<String,Object> map = new HashMap<>();
            //获取子节点数据列表
            map.put("id", dict.getId());
            map.put("isParent", count > 0 ? true : false);
            map.put("name", dict.getName());
            zNodes.add(map);
        };
        return zNodes;
    }

DictServiceImpl中使用了DictDao接口,使用Mybatisde的语句映射,将DictMapper.xml与DictDao中的方法映射。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【期末复习】例题说明Prim算法与Kruskal算法

点睛Prim与Kruskal算法是用来求图的最小生成树的算法。最小生成树有n个顶点&#xff0c;n-1条边&#xff0c;不能有回路。Prim算法Prim算法的特点是从个体到整体&#xff0c;随机选定一个顶点为起始点出发&#xff0c;然后找它的权值最小的边对应的另一个顶点&#xff0c;这两个…

IEEE学生会员注册

IEEE学生会员注册0、引言IEEE 会员介绍1、IEEE学生会员会费2、加入学生会员2.1、创建/登录 IEEE 账户2.2、填写/维护 个人基本信息2.3、填写/维护 基本教育信息3、选择一个你将要加入的协会或社团4、确认购物车5、付款5.1、付款详情信息页5.2、扫码付款并验证5.3、会员确认邮件…

【前端提效】-- VsCode 实用插件推荐

EditorConfig for VS Code ***** 作用&#xff1a;多人协同开发&#xff0c;规范缩进风格&#xff0c;缩进大小&#xff0c;tab长度以及字符集等&#xff0c;解决不同IDE的编码范设置&#xff0c;在这里配置&#xff08;.editorconfig&#xff09;的代码规范规则优先级高于编辑…

Object.defineproperty方法

Object.defineproperty 的作用就是直接在一个对象上定义一个新属性&#xff0c;或者修改一个已经存在的属性Object.defineproperty可以接收三个参数Object.defineproperty(obj, prop, desc)obj : 第一个参数就是要在哪个对象身上添加或者修改属性prop : 第二个参数就是添加或修…

Ansys Zemax | 如何在存在全内反射 (TIR) 的情况下应用散射

在本文中&#xff0c;我们将展示如何利用虚拟表面来对具有全内反射 (TIR) 的物体进行建模&#xff0c;同时保持其他独特的表面特性&#xff0c;例如粗糙的表面结构。 下载 联系工作人员获取附件 简介 在OpticStudio中&#xff0c;全内反射 (TIR) 在其他表面属性&#xff08…

计网物理层

第一章&#xff1a;物理层 1、物理层的主要作用&#xff1a; ①、在不同的传输媒体上传输比特流 ②、屏蔽各种传输媒体的差异&#xff0c;为上层的数据链路层提供服务&#xff0c;使得上层的数据链路层无需考虑传输媒体是什么 2、传输媒体的种类&#xff1a; ①、导引型传…

python环境配置

python环境配置一、ADB环境配置1、ADB下载路径:2、点击下载3、解压并放到本地磁盘4、配置ADB环境变量二、Python环境配置1、Python下载路径:2、点击下载(默认下载最新的)3、解压并放到本地磁盘4、配置Python环境变量5、配置pip环境变量三、Pycharm安装1、pycharm下载路径:2、点…

“数字乡民”疑云:助农?坑农?

1月2日&#xff0c;“深入实施数字乡村发展行动&#xff0c;推动数字化应用场景研发推广”写入了国务院《关于做好2023年全面推进乡村振兴重点工作的意见》中&#xff0c;2022年中央一号文件也要求“大力推进数字乡村建设&#xff0c;推进智慧农业发展”。 在这之前&#xff0…

ArrayList删除元素时导致的java.util.ConcurrentModificationException错误的分析及源码解读

1.前言 集合对于开发者来说都不陌生&#xff0c;可以说是我们日常开发中使用最频繁的对象之一&#xff0c;尤其是ArrayList&#xff0c;可是对于一些开发者并不真正了解它&#xff0c;只是使用习惯了&#xff0c;也就按照集合中基础的一些api使用了&#xff0c;但有时候却因为错…

MacBook IDEA 顶部菜单栏不显示问题

文章目录背景&#xff1a;当前显示方式一1. 快捷键&#xff1a;双击shift 搜索 idea.vmoptions3. 在idea.vmoptions文件末尾添加 -Dapple.laf.useScreenMenuBarfalse方式二1. 访达 > 应用程序 > idea 右键 显示包内容2. 进入到bin包位置的命令终端3. 编辑文件 vi idea.pr…

硬件学习 软件Cadence day05 快速拥有 元件的原理图和PCB 分装 (Ultra Librarian 下载)

1.下载 Ultra Librarian &#xff08;实测有用&#xff09; 一个链接&#xff1a; (5条消息) Ultra Librarian 的安装和使用_lian123的博客-CSDN博客_ultra librarian 安装过程简单&#xff01;&#xff01;&#xff0c; 一直next 就行. 2.快速寻找 元器件 &#xff08;…

8个优秀图片素材库,免费/商用/高分辨率。

有深度的摄影照片&#xff0c;总可以让我们深思&#xff0c;从中获取有用的设计灵感。图片素材可以用于很多场景&#xff0c;比如海报背景、封面等等。如何才能找到质量高、免费还可以商用的图片素材呢&#xff1f;别着急&#xff0c;本期我就给大家推荐8个非常牛的图片素材网站…

音视频基础之视频主要概念

视频主要概念 **视频码率&#xff1a;**kb/s&#xff0c;是指视频文件在单位时间内使用的数据流量&#xff0c;也叫码流率。码率越大&#xff0c;说明单位时间内取样率越大&#xff0c;数据流精度就越高。 **视频帧率&#xff1a;**fps&#xff0c;通常说一个视频的25帧&…

查找算法复习

先序在了解查找算法之前&#xff0c;需要熟悉几个概念&#xff0c;不然后面容易产生理解错误。查找表&#xff1a;即被查找的对象&#xff0c;通常由几个关键字组成。关键字&#xff1a;就是数据项、字段的意思。关键字有主次之分&#xff0c;其中主关键字取值是唯一的。查找长…

工程监测多通道振弦模拟信号采集仪VTN的AABB 通讯协议

工程监测多通道振弦模拟信号采集仪VTN的AABB 通讯协议 AABB 通讯协议是一种非标准自定义协议&#xff0c; 相较于 MODBUS 通讯协议&#xff0c;结构更简单&#xff0c;指令生成方法更容易&#xff0c;便于进行快速测试。 AABB 通讯协议支持单寄存器读写两种指令。 &#xff08…

开机一键ghost重装系统如何操作

现在有很多的朋友伙伴们在后台反映自己想尝试一个简单的重装系统方法&#xff0c;现在小编就带着推荐来啦&#xff0c;开机一键ghost重装系统&#xff0c;他简单操作易上手&#xff0c;小白也可以轻松掌握&#xff0c;大家一起来看看吧。 工具/原料&#xff1a; 系统版本&…

NLP文本自动生成介绍及Char-RNN中文文本自动生成训练demo

前言 文本自动生成是自然语言处理领域的一个重要研究方向&#xff0c;实现文本自动生成也是人工智能走向成熟的一个重要标志。文本自动生成技术极具应用前景。 例如&#xff0c;文本自动生成技术可以应用于智能问答与对话、机器翻译等系统&#xff0c;实现更加智能和自然的人机…

云生源安全引流方案(K8S)

背景 在云原生中,我们无法非常方便准确的截取流量。比如在 K8S 中的每个 Pod 都需要和 API Server 进行 health 通讯等,这些并非是我们用户真实发生的流量。所以我们需要把 K8S 中发生的流量和用户发生的流量给分割开来,还有就是 K8S 对于开发者来说是一个黑盒,不知道怎么…

如何写好controller层

前言一、Controller层参数接收二、统一状态码三、统一校验四、统一响应五、统一异常前言本篇主要要介绍的就是controller层的处理&#xff0c;一个完整的后端请求由4部分组成&#xff1a;1. 接口地址(也就是URL地址)、2. 请求方式(一般就是get、set&#xff0c;当然还有put、de…

运行redis报错 由于目标计算机积极拒绝,无法连接

第一打开redis服务器时出现闪退第二再点击redis-cli.exe时&#xff0c;出现了由于目标计算机积极拒绝&#xff0c;无法连接尝试用这个命令解决此问题&#xff1a;打开命令运行窗口&#xff0c;进入cmd&#xff0c;然后进入redis安装的目录&#xff0c;如下图&#xff1a;回车之…