牛客网刷题总结—Day1
1.关于哈夫曼树
哈夫曼树也称最优二叉树,其n个叶子节点都是带有权值的,其节点的带权路径长度(n个叶子节点的权值*其到根节点的路径之和)最小的二叉树即为哈夫曼树。
一般的哈夫曼树不存在度为1的节点(除非在退化的情况下)
n个节点经过n-1一次合并最终成为拥有2n-1个节点的哈夫曼树
1.1 构建哈夫曼树
1>从n个带权的节点中选择最小的两个n1,n2构成一个子二叉树,并将其根的权值设为w(n1) + w(n2) = nw
2>再将n个带权节点删除n1和n2,而加入nw
3>再重复以上两步
1.2 哈夫曼编码
建立一棵哈夫曼树,规定其左孩子均对应于二进制的0、右孩子均定义为二进制的1—这就是一颗哈夫曼编码树
可以通过此树实现PFC编码(前缀无歧义编码—prefix-free code),每个字符对应着规定某个编码—如规定‘M’对应110等
只要所有字符都对应于叶节点,就不会产生歧义现象
可以通过哈夫曼编码实现文件的无损压缩或者解压等
根据某个字符出现的频率高低作为权重,频率高的其二进制码则短一些—相当于哈夫曼树中权重高的叶子节点到根节点路径短,频率低的二进制码则相对较长
其解码根据编码串如"11001111111001001"依次进行扫描,从根节点开始根据对应是0/1深入左/右子树进行,直至达到叶节点退出—根据此路径所扫描的码如110,对应'M'
由此再返回此树的根节点进行再次扫描—由此迭代至编码串遍历完毕
2.C++不能重载的运算符
1>"."类成员访问运算符 2>"::"域运算符 3>".*"类成员指针访问运算符 4>sizeof()运算符
注意:new/delete运算符是可以被重载的
3. c++调用基类虚函数是采用动态联编(动态绑定)
C++默认是采用函数和实现在编译阶段就进行绑定—即静态绑定
而涉及到多态时需要对虚函数设置一个virtual tablel存放函数指针
4.结构体中分配的位数
struct mybitfields
{ unsigned short a : 4; unsigned short b : 5; unsigned short c : 7;} testvoid main(void){ int i; test.a = 2; test.b = 3; test.c = 0; i = *((short *)&test); printf("%d\n", i);}其中冒号表示分配了几位空间,即 a : 4,b : 5, c : 7; 且按照以下方式排列
根据main函数中对三值赋值结果来看其内存中的0/1分布为
地址值 位
0x11 0 0 1 0 (a) 0 0 0 1
0x12 1(b) 0 0 0 0 0 0 0(c)
或者
0 0 0 0 0 0 0(c)0 0 0 1 1(b) 0 0 1 0(a) 十进制的50或者十六进制的0x0032(每4位计算一次)
对test地址的数据进行short *强转 - short占两个字节即为50,再通过隐式的int转换变为0x00000032(50)
牛客网刷题总结—Day1的更多相关文章
- 牛客网刷题(纯java题型 31~60题)
牛客网刷题(纯java题型 31~60题) 重写Override应该满足"三同一大一小"三同:方法名相同,参数列表相同,返回值相同或者子类的返回值是父类的子类(这一点是经过验证的) ...
- 牛客网刷题(纯java题型 1~30题)
牛客网刷题(纯java题型 1~30题) 应该是先extend,然后implement class test extends A implements B { public static void m ...
- 【MySql】牛客SQL刷题(上)
牛客SQL题目 题目链接:https://www.nowcoder.com/ta/sql 查找最晚入职员工的所有信息 select * from employees where hire_date = ...
- 牛客SQL刷题第一趴——非技术入门基础篇
user_profile表: id device_id gender age university province 1 2138 male 21 北京大学 Beijing 2 3214 male ...
- 牛客网算法题之All-in-All
题目: 有两个字符串s 和t,如果即从s 中删除一些字符,将剩余的字符连接起来,即可获得t.则称t是s 的子序列.请你开发一个程序,判断t是否是s的子序列. 输入描述: 输入包含多组数据,每组数据包含 ...
- 牛客网补题 New Game!(原Wannafly summer camp day2原题)
思路:这个题在秦皇岛的时候好像没有写出来,反正我是没有写出来,题解是听懂了:把直线和圆都看做一个结点,圆和直线用点到直线的距离与半径差求出来,圆和圆之间用点和点之间的距离和半径差表示,最后最短路跑一遍 ...
- 牛客SQL刷题第三趴——SQL大厂面试真题
01 某音短视频 SQL156 各个视频的平均完播率 [描述]用户-视频互动表tb_user_video_log.(uid-用户ID, video_id-视频ID, start_time-开始观看时间 ...
- 牛客SQL刷题第三趴——SQL必知必会
01检索数据 SQL60 从 Customers 表中检索所有的 ID 编写 SQL 语句,从 Customers 表中检索所有的cust_id select * from Customers; SQ ...
- java面试题错题集(牛客网错题)
一.关于Object类的说法正确 Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类. Object的equals方法,只有一句话,return this==ob ...
随机推荐
- npm ERR! Cannot read property 'match' of undefined
在Vue项目中运行npm i命令时直接提示npm ERR! Cannot read property 'match' of undefined错误了,此时需要把package-lock.json文件删 ...
- 深入理解Java内存模型中的虚拟机栈
深入理解Java内存模型中的虚拟机栈 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都会有各自的用途,以及创建和销毁的时间,有的区域会随着虚拟机进程的启 ...
- A1958
Magic Girl Haze T组 n个点,m条有向含权边,可以选择不超过k条边,将其权值变为0. 问点1到点n的最短距离是多少? 1≤T≤5n≤105m≤2×105k≤10wi≤109 1\leq ...
- VSCode C语言编程(二)新建项目及编译
添加工作区: 把文件夹在工作区删除: 把HelloWorld模板文件夹解压到工作目录 模板下载(代码解释请看模板里的注释) 添加项目文件夹: 编辑器打开的文件必须与main.c同目录 点击右边编译图标 ...
- Udacity_deep_learning_anconda
1.创建anconda的虚拟环境: conda create -n your_env_name Python=X.X(2.7.3.6等) 2.查看anconda 有哪些虚拟环境: conda env ...
- CPPU OJ | 开发日志
2019.12.18 ~ 2019.12.22 用腾讯云的学生服务器测试搭建OJ(踩了无数的坑) 2019.12.25 ~ 2019.12.28 在模管中心办理申请虚拟服务器的手续 2019.12.3 ...
- 前端 form select js处理
1.代码如下 function initializeSelect(data) { var area = $("#ServiceName"); area.find("opt ...
- VS Code中Ionic serve命令 执行跳出的问题
项目情况:用vscode编写的ionic(tab类型)项目(具体使用到的技术Angular\Typescrip\Ionic) 具体情况如下: 找到的可能原因: 出错的项目情况:在一个ts文件中编写两个 ...
- jquery 清除内容
jQuery empty() 方法删除被选元素的子元素. $("#div1").empty(); 清空文本框的值 $("#password").val(&quo ...
- 关于XXE
NJUPT CTF2019: 做题的时候,抓包看了一下,响应XML格式消息,并没有严格过滤,这道题读文件, <!DOCTYPE foo [ <!ENTITY xxe SYSTEM &quo ...