算法
索疋
NULL
展开
-
【初级算法剖析】计算字符串需要的哈夫曼长度
算法要求和答案并不复杂,不复制,不直接贴结果,而是加一些个人分析,面向非算法专业的人员。背景: 哈夫曼编码,构造一个二叉树,左支代表编码0,右支1,从根节点到叶子节点就是编码,这样每个树叶节点都是具有唯一不等长编码的,通用用于无损压缩。为了合理利用空间,频率赵越高的,越要短,靠近根。每个元素有一个相应的权重,将子节点的权重加和,就表示这一支的总权重。自然权重越小,越要靠底层原创 2017-06-30 13:59:59 · 843 阅读 · 0 评论 -
【初级算法剖析】超大文件获取顺序相关数据问题
一类问题,典型问题一般如下:1、给出超大文件,比如100T,每一行是一个访问ip/查询关键字等,计算频率最高的前100个。2、给出超大文件,比如100T,第一行是一个值,计算第N个。特点:1、数据非常大,无法用内存加载。2、数据无序。3、结果顺序相关。初步思路:一直在思考怎么用流式的一次遍历就直接出结果,无果。算法拼的就是经验,没搞过就很麻烦。有效思原创 2017-07-13 18:10:03 · 616 阅读 · 0 评论 -
只能进行赋值,+1,固定次数的循环三种原子操作,只能操作0和正整数
要求:只能进行赋值,+1,固定次数的循环三种原子操作,只能操作0和正整数简单做个思路转换即可。#include using namespace std;int my_add(int x, int y){ for(int i =0; i < y; i++) //加法,连续加1 x++; return原创 2017-06-27 19:20:05 · 355 阅读 · 0 评论 -
将语句单词反转
题目:将语句的单词反转, I am chinese 输出 chinese am I,不能开辟非常量存储空间算法:先将每个单词反转,再整体反转一次。题很简单,但这个思路一般人不好往这个方向想。#include #include #include inline void swap(char* p1, char* p2) //交换{ char c = *p1;原创 2017-06-27 19:30:10 · 402 阅读 · 0 评论 -
处理流式数据中MAX N问题
题目:要求找出数据流中最大的5个数思路:构建一个5个元素的最小堆,循环处理,每次和堆顶元素比较即可#include #include #include inline void swap(int arr[], int i, int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;原创 2017-06-27 19:57:40 · 641 阅读 · 0 评论 -
给出进程启动区间计算任意时间点并行进程数量
题目:原题不公开,需求是给出大量进程的启动和结束时间,计算任意时间点进程并发数。进程数有限,查询次数很大。关闭开区间: [启动,关闭)思路:先将时间区间点排序,然后遍历计数,遇到启动+1,遇到关闭-1,时间点切换时,就得出上个值到当前值区间的进程数接口定义如下:void number_of_tasks_running( OUT int result[], //输出结果原创 2017-06-27 21:27:45 · 483 阅读 · 0 评论 -
【旧资料整理】初级算法-单/双链表逆序一点改进
毕业之前实现过的,当时受到老师一点好评,有所印象,暂未发现完全相近实现,分享出来另外递归实现可以通过栈间接省去变量,也是个代码简洁但使用有限的算法,有限之处在于链表过长会栈异常,效率也不好。#include #include struct node_t{ int val; struct node_t* prev; struct nod原创 2017-06-28 10:28:58 · 312 阅读 · 0 评论