2018-01-18 biezhi
熟悉编程的人都知道二进制总是一个让人晦涩难懂的词汇,只有大神级的程序员才有资格把玩它。 我们今天来重新认识一下二进制,了解编程中的数学知识和计算机为什么使用二进制? more 先聊聊十进制 我们平时使用的是10进制计数法。 继续阅读 »
2014-11-01 Xie Jingyi
在学习数论时我们都知道:只用2的幂次可以组合出所有的正整数。这便是二进制的魅力——状态简单而又变化万千。 引子 实际算法中,常常有一些线性的但数据量特别大的问题,如区间求和、求最小值等。很多时候,为了把时间复杂度从$O(n^2)$甚至更高的地方降下来,我们需要对数据进行一些预处理,以提高计算的速度。在这其中,有很大一部分是来自二进制运算特点的启发。 目录 树状数组 RMQ LCA&树上倍增 继续阅读 »
2014-11-02 Xie Jingyi
问题描述:已知数组a以及若干个查询(x, y),求a[x~y]之间的最小值。 分析 不难发现:若取t使得$2^t\leq y-x+1$且$2^{t+1}>y-x+1$,则有: $$[x, x+t]\bigcup[y-t+1,y]=[x,y]$$ 运用二进制的思想,我们只需预处理出$i~i+2^k-1$之间的最小值,即可快速完成查询。设dp[i][j]为$i~i+2^j-1$之间的最小值,则有: $$dp[i][j]=min(dp[i][j-1],dp[i+2^{j-1}][j-1])$$。 Code var a: array [1..100000] of longint; dp: array [1..1000 继续阅读 »
2014-08-31 Xiaosong Gao
我们把自己的程序发布到App Store,但是不能保证每一个用户都是从App Store下载官方APP,也不能保证每一个用户都不越狱。 换句话说,我们无法保证程序运行环境在苹果管控策略下就绝对的安全。 所以,在有些情况下,尤其是和钱有关系的APP,我们有必要在和服务器通信时,让服务器知道客户端到底是不是官方正版的APP。 继续阅读 »
2018-04-04 findneo
note of https://www.ichunqiu.com/course/56927 Hacking三步曲 理解系统(Understanding) 系统性的基础课程学习,深入理解计算机系统运作机制。 破坏系统(Breaking) 学习与创造漏洞挖掘与利用技巧 重构系统(Reconstruction) 设计与构建系统防护 基础课程学习 核心基础课程——计算机的工作原理 体系结构 CPU的设计与实现 机器指令与汇编语言 指令的解码、执行 内存管理 CMU 18-447 Introduction to Computer Architecture https://www.ece.cmu.edu/~ece447/s15/dok 继续阅读 »
2016-01-17 LEo
本文主要通过介绍如何计算十进制数转换成二进制数后,其二进制数中是1的个数,进而分析算法复杂度相关问题。例如十进制数7,二进制表示为0111,总共有三个1。 代码使用go语言实现,为简单起见,算法4和算法5只能计算0-255范围之内的数。 继续阅读 »
2014-11-02 Xie Jingyi
介绍 所谓树状数组,就是将线性的数组预处理成树状的结构以降低时间复杂度。先来看一幅经典的图: 其中的a数组为原生数组,c数组为辅助数组,计算方式为: $$c_1=a_1——{(1)}{10}={(1)}_2$$ $$c_2=a_2+c_1——{(2)}{10}={(10)}_2$$ $$\ldots$$ 不难发现,c[k]存储的实际上是从k开始向前数k的二进制表示中右边第一个1所代表的数字个元素的和。这样写的好处便是可以利用位运算轻松计算sum。上代码。 Code var n, i: longint; a, c: array [1..10000] of longint; //计算x最右边的1所代表的数字。 继续阅读 »
2014-10-08 Xie Jingyi
从今天起至10月11日,持续连载。 关于计算机 ENIAC 出现于1946年。 是最早的计算机。 是电子管计算机。 其他 阶码,即浮点数的指数部分。 IPv6是128位的。 求补码:二进制下:各位取反再加1 或 把原码减1再取反。 关于算法 各种排序的时间复杂度 快速排序:$O(nlogn)$,最坏为$O(n^2)$。 冒泡排序:$O(n^2)$。 归并排序:$O(nlogn)$。 计数排序:$O(n)$。 插入排序:$O(n^2)$。 关于树 完全二叉树 vs 满二叉树:完全二叉树最后一层不一定满。 前序遍历:中左右;中序遍历:左中右;后序遍历:左右中。 节点数 继续阅读 »
2016-08-12 ruki
tbox对于数据文件的解析提供了完善的支持,可以对各种二进制数据,文件数据流,网络数据流等进行各种解析操作 并且提供了一整套字节解析、比特位解析的接口,来支持各种流模式: stream 通用数据流,提供对流式数据的读写和解析,支持多层流嵌套以及各种协议(http, socket, file, data ...) 对于如何使用stream,这里暂时不详细介绍了,之后会单独重点介绍下,这里主要是为了描述,如何使用stream来处理字节数据的解析 例如,我要从数据流中,读取一个大端的16bits数值,很简单,只要: c tb_uint16_t value; if (tb_stream_bread_u16_be(stream, 继续阅读 »
2016-09-12 徐哲
1.Java与C++的异同 Java解释性语言:源代码-编译器(字节码)-JVM执行 C/C++编译型语言:编译链接成二进制代码 Java不存在全局变量,全局函数,没有指针,不支持多重继承,不支持运算符重载,没有预处理器,不提供goto语句(但保留关键字),不支持自动强制类型转换,必须显式强制类型转换。 Java为纯面向对象语言,所有代码包括函数,变量等都属于类 继续阅读 »