师毅的Blog

【https://blog.shiyicode.com】听说太理想的一切都不可接触,我却哪管千山走遍,亦要设法去捕捉......

哈夫曼编码压缩解压缩实现&不同类型文件压缩比的测试

压缩原理及步骤&&压缩比的计算压缩原理及步骤压缩的第一步: 将一个文件以各个字符出现的次数为权值建立哈夫曼树,这样每个字符可以用从树根到该字符所在到叶子节点的路径来表示。(左为0,右为1) 压缩第二步: 哈夫曼编码有一个很重要的特性:每个字符编码不会成为另一个编码的前缀。这...

2015-12-30 01:01:53

阅读数 4723

评论数 1

utf8编码原理与发展历程

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出更多的状态,状态开始变来变去。他们看...

2015-12-28 14:03:59

阅读数 517

评论数 0

C++实现大数除法

题外话 大数除法无疑是大数操作里最麻烦的一项,写大数不实现除法无异于画龙无鳞。 思路 最原始的,脑子最容易冒出来的思路,是一下一下的减,看能累计减多少次,最后的总次数就是结果,但这样的效率实在太慢。但我们可以一次性减去 除数的1,10,100,1000倍,只要它在当前倍数下比被除数小。 ...

2015-12-25 16:09:56

阅读数 7735

评论数 3

c++实现大数乘法

思路 第i位数乘第j位数,乘积是第i+j位数(从0开始) 如123*456 乘积各位数为 个位 3*6 十位 2*6 + 3*5 百位 2*5 + 1*6 + 3*4 千位 1*5 + 2*4 万位 1*4 然后从后往前,取余更新。 代码 #include <stdio.h...

2015-12-22 00:51:44

阅读数 5778

评论数 0

c++实现大数加法(含负数)

题外话 一直想好好的把所有大数操作好好敲一遍,都止于惰性,碰到一个要用到大数的题,索性就由此开始吧。 大数加法写过太多次了,含负数的第一次写,用运算符重载的形式实现,挺有意思。 思路 当两数符号相同时,相加即可,重点内容结果符号不变。 不同时,需要对两数的绝对值进行比较,结果符...

2015-12-21 23:11:10

阅读数 3776

评论数 4

51Nod 1454 升排列

1454 升排列 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 定义长度为n的排列为数组 p = [p1, p2, ..., pn] ,这个数组包含n个整数,他们都在1到n之间,并且两两不同。我们说这个排列把1...

2015-12-21 18:48:59

阅读数 811

评论数 1

51Nod 1191 消灭兔子 (贪心+优先队列)

题目链接:消灭兔子题目大意 n个兔子,每个兔子都有一个血量b[i] m种箭(每种各一支),每种箭都有伤害值d[i]和价格p[i] 每个兔子只能被射一次,伤害值大于血量则死,每种箭只能用一次 问杀死所有兔子需要的最小价格为多少,若不能杀死,则No Solution m,n...

2015-12-18 16:43:22

阅读数 962

评论数 0

51Nod 1163 最高的奖励(贪心+优先队列 & 并差集)

题目链接:最高的奖励题目大意 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。 Input ...

2015-12-18 03:55:12

阅读数 900

评论数 0

UVA - 10384 推门游戏(IDA*+剪枝)

题目链接 题意 求最少需要几次乘除法可以从x得到x^n? 思路 也就是求1经过最少加减可以得出n 序列初始只有1,每次选任意两数进行加减,加入序列 使用IDA*迭代加深搜索 剪枝条件 当前序列最大值*(2^max-步数) < n 即后边步数一直按最快的求法仍...

2015-12-17 17:28:16

阅读数 1030

评论数 0

UVA - 1374 Power Calculus(IDA*+剪枝)

题目链接 题意 求最少需要几次乘除法可以从x得到x^n? 思路 也就是求1经过最少加减可以得出n 序列初始只有1,每次选任意两数进行加减,加入序列 使用IDA*迭代加深搜索 剪枝条件 当前序列最大值*(2^max-步数) < n 即后边步数一直按最快的求法仍...

2015-12-16 05:04:19

阅读数 576

评论数 0

51Nod 1376 最长递增子序列的数量(dp+树状数组)

题目链接最长递增子序列的题做个不少,让求数量的第一次做,O(n^2)的代码很好写,但数据范围50000,故无情超时,想了很久,总算有所得。时间: O(nlog(n)) 空间: O(2*n)思路 O(n^2)的思路中,每次求以第i个数结尾的最大长度和记录总数都要对前i-1个数进行遍历比较,如果...

2015-12-16 03:38:13

阅读数 1538

评论数 2

初学A*算法求解静态地图的最短路径

以前所接触过的最短路径算法是dijkstra或floyd之类的,都是在已知每两点之间距离的情况下求最短路的。那么想一下这样的案例 给你一个地图,类似于迷宫一样,中间有些障碍物,再给定起点终点,求该两点间最短路,显然,上述两种算法就不适用了,因为提到的迷宫,我们可能会很容易想到广搜bfs,但一次...

2015-12-07 04:13:08

阅读数 5522

评论数 0

51Nod 1022 石子归并 V2 (划分型dp四边形不等式优化)

石子归并以前做过好几次,是经典划分型dp题之一,一直用的O(n3)的正常dp方法,也从未想过该怎么去优化它。 直到昨天做这道题,n的范围由往常的100改为了1000,老方法一直超时,苦不堪言,搜到有个四边形不等式的优化方法,看帖子,画式子,拉着学长帮忙推导,总算是大概弄明白了一点。 dp(i,j...

2015-12-03 03:34:46

阅读数 1860

评论数 0

51Nod 1459 迷宫游戏

题目链接:迷宫游戏题目 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了你的起点和终点房间,你首要目标是从起点尽快到达终点,在满足首要目标的前...

2015-12-01 03:02:47

阅读数 1266

评论数 0

提示
确定要删除当前文章?
取消 删除