[Algorithm][综合训练][哈夫曼编码][abb][旋转字符串]详细讲解

news2024/12/24 8:51:15

目录

  • 1.哈夫曼编码
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 2.abb
    • 1.题目链接
    • 2.算法原理详解 && 代码实现
  • 3.旋转字符串
    • 1.题目链接
    • 2.算法原理详解 && 代码实现


1.哈夫曼编码

1.题目链接

  • 哈夫曼编码

2.算法原理详解 && 代码实现

  • 哈夫曼编码:核心 -> 让出现次数越多的字符编出来的码越短

    • 是什么:最优的压缩方式
    • 怎么用
      • 统计每个字符的频次
      • 根据频次构建最优二叉树
      • 根据最优二叉树编码
        请添加图片描述
  • 解法:利用小根堆,一边构建树,一边计算长度

    #include <iostream>
    #include <vector>
    #include <queue>
    using namespace std;
    
    typedef long long LL;
    
    int main()
    {
        int n = 0;
        cin >> n;
    
        priority_queue<LL, vector<LL>, greater<>> heap;
        while(n--)
        {
            LL x = 0;
            cin >> x;
            heap.push(x);
        }
    
        // 构建最优二叉树/哈夫曼树
        LL ret = 0;
        while(heap.size() > 1)
        {
            LL x1 = heap.top();
            heap.pop();
            LL x2 = heap.top();
            heap.pop();
    
            heap.push(x1 + x2);
    
            ret += x1 + x2;
        }
    
        cout << ret << endl;
    
        return 0;
    }
    

2.abb

1.题目链接

  • abb

2.算法原理详解 && 代码实现

  • 解法:动态规划 + 哈希表 -> 子序列问题 -> 以某个位置为结尾来分析问题
    • 状态表示dp[i]:以i位置元素为结尾的所有的子序列中,有多少个_xx

    • 状态转移方程
      请添加图片描述

    • 返回值:整张dp表的和

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        int n = 0;
        string str;
        cin >> n >> str;
    
        long long f[26] = { 0 };
        long long g[26] = { 0 };
    
        long long ret = 0;
        for(int i = 0; i < n; i++)
        {
            // DP
            int x = str[i] - 'a';
            ret += f[x];
    
            // Update
            f[x] = f[x] + i - g[x];
            g[x] = g[x] + 1;
        }
    
        cout << ret << endl;
    
        return 0;
    }
    

3.旋转字符串

1.题目链接

  • 旋转字符串

2.算法原理详解 && 代码实现

  • 解法一:暴力模拟 --> 每次旋转⼀下A字符串,看看是否和B字符串相同
  • 解法二:规律 + string接口
    • 如果A能够旋转之后得到B的话,在A倍增之后的新串中,⼀定是可以找到B的
    • 因此,仅需让A倍增,然后查找B即可
    bool solve(string A, string B)
    {
    	if(A.size() != B.size())
    	{
    		return false;
    	}
    
    	return (A + A).find(B) != string::npos;
    }
    

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

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

相关文章

Linux系统应用(3)——编辑器vim

个人内容简介&#xff1a; &#x1f343;个人主页&#xff1a;诉清风2023 &#x1f388;逆转时间的公式&#xff0c;就是珍惜现在ദ്ദി˶&#xff70;̀֊&#xff70;́ ) ✧ 目录 个人内容简介&#xff1a; &#x1f388;逆转时间的公式&#xff0c;就是珍惜现在ദ്ദ…

junit格式报告解析工具

前言 在测试过程中&#xff0c;使用unittest或者pytest等主流框架&#xff0c;都可以生成junit格式的测试报告。当然也可以生成html格式的报告。但是为了自定义自己的测试报告&#xff0c;我开发了一款web网页工具&#xff0c;使用该工具上传junit格式的xml报告&#xff0c;可…

[Algorithm][综合训练][奇数位丢弃][求和][计算字符串的编辑距离]详细讲解

目录 1.奇数位丢弃1.题目链接2.算法原理详解 && 代码实现 2.求和1.题目链接2.算法原理详解 && 代码实现 3.计算字符串的编辑距离1.题目链接2.算法原理详解 && 代码实现 1.奇数位丢弃 1.题目链接 奇数位丢弃 2.算法原理详解 && 代码实现 解法…

丙类谐振功放的工作状态分析

前言&#xff1a;我们之前已经根据导通角θ&#xff0c;将工作状态分成了甲乙丙三类。我们发现丙类的效率最高&#xff0c;所以现在我们专门分析一下丙类工作状态。 1定量分析与定性分析 定量分析&#xff1a;是指分析以数量形式存在着的属性。 定性分析&#xff1a;是指分析…

2024.8.29 C++

作业 仿照string类&#xff0c;实现myString 代码 #include <iostream> #include <cstring> using namespace std; //仿照string完成myString类 class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度p…

flex实现骰(tou)子点数

文章目录 效果演示分析思路代码实现 效果演示 分析思路 5点需要使用margin进行移动点数。而6点的话&#xff0c;使用align-content: space-between;和 justify-content: space-between;就能实现&#xff0c;不过需要注意的是主轴为侧轴&#xff0c;dot的第二个要给padding才能实…

【功能自动化】自动识别测试用例

1.创建unitWebtours.py 将unitWebtours.py放在test文件夹下 unitWebtours.py 代码实现 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep import unittestdriver Noneclass Webtours(unittest.TestCase):clas…

java写入word表格(poi-tl)

1.导入依赖 <!--poi-tl--> <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version> </dependency>2.代码 自己创建模板。放在&#xff08;resource/file&#xff09;…

如何更改 Mac 上 Java 的默认版本?

优质博文&#xff1a;IT-BLOG-CN 第一次运行/usr/libexec/java_home -V将输出类似以下内容&#xff1a; Matching Java Virtual Machines (3): 1.8.0_05, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home 1.6.0_65-b14-4…

那么啥是MySQL集群技术捏

Mysql 集群技术 一 Mysql 在服务器中的部署方法 在企业中90%的服务器操作系统均为Linux 在企业中对于Mysql的安装通常用源码编译的方式来进行 官网&#xff1a;http://www.mysql.com 1.1 在Linux下部署mysql 1.1.1 安装依赖性&#xff1a; [rootmysql1 ~]# yum install c…

Windows通过网线连接开发板共享网络

Windows端 打开更开适配器选项右键WLAN–属性–共享 右键以太网–属性–Internet协议版本4(TCP/IPv4) 记住IP地址 开发板端 查看网卡 ifconfig设置IP在同一网段 ifconfig eth0 192.168.137.2 netmask 255.255.255.0设置网关 route add default gw 192.168.137.1配置DNS su…

Python-MNE-源空间和正模型03:自动源配准的方法

这个例子展示了如何使用coregistration函数通过脚本自动完成MEG-MRI的coregistration。一般情况下&#xff0c;该方法的结果与人工共配准的结果是一致的。 **但一定要注意&#xff1a;**协同配准的质量在很大程度上取决于受试者准备过程中收集的头形点(HSP)的质量和t1加权MRI的…

C语言重难点总结(1)-指针、二维数组、结构体(联合体、枚举)

本节内容 1.指针&#xff08;指针数组、数组指针&#xff09; 2.二维数组&#xff08;指针操作与二维数组&#xff09; 3.结构体、联合体、枚举 一、指针 1.什么是指针&#xff1f; 内存中字节的编号地址称为指针 2.指针的大小&#xff1f; 固定为四字节 3.指针变量的…

YOLOv8改进 | 注意力篇 | YOLOv8引入CBAM注意力机制

1.CBAM介绍 摘要&#xff1a;我们提出了卷积块注意力模块&#xff08;CBAM&#xff09;&#xff0c;这是一种用于前馈卷积神经网络的简单而有效的注意力模块。 给定中间特征图&#xff0c;我们的模块沿着两个独立的维度&#xff08;通道和空间&#xff09;顺序推断注意力图&…

Python | Leetcode Python题解之第384题打乱数组

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, nums: List[int]):self.nums numsself.original nums.copy()def reset(self) -> List[int]:self.nums self.original.copy()return self.numsdef shuffle(self) -> List[int]:for i in range(l…

C++ | Leetcode C++题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; class Solution { public:bool canConstruct(string ransomNote, string magazine) {if (ransomNote.size() > magazine.size()) {return false;}vector<int> cnt(26);for (auto & c : magazine) {cnt[c - a];}for (auto &am…

群晖(Docker Compose)配置 frp 服务

为了方便远程电脑&#xff0c;访问自己电脑上的ComfyUI等服务&#xff0c;配置了 frp 服务。 配置 frp 服务后&#xff0c;发现群晖中的一些服务也可以 stcp 安全的暴露出来。 直接在群晖通过 Docker Compose 方式部署 frps 和 frpc&#xff0c;访问者通过 frpc 安全访问暴露…

计算机三级网络第3套练习记背

计算机三级网络第3套练习记背

【C++ | 设计模式】抽象工厂模式的详解与实现

1. 概念 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们具体的类。它允许客户端代码通过工厂接口来创建一组对象&#xff0c;而无需了解它们的具体实现细节。 …

从暴力到秩序:解锁权力奥秘

从暴力到秩序&#xff1a;解锁权力奥秘 - 孔乙己大叔权力的诞生 在人类社会的最初形态中&#xff0c;权力往往源自最原始的力量——暴力。一个人&#xff0c;起初仅拥有一把枪&#xff0c;他的权力简单而直接&#xff1a;决定对谁开枪。然而&#xff0c;随着他利用这把…