JT Blog

Thinking will not overcome fear but action will.

IOS底层探索

底层探索

编译器 大家都知道,我们的计算机CPU只能读懂机器码(machine code,也就是由一堆0和1组成的编码),但我们现在编写的代码并不是机器码,而是高级编程语言(Objective-C、Swift、Java、…),最终也可以被计算机所执行,这就需要编译了,在编译的过程中,编译器的作用便是把我们的高级编程语言通过一系列的操作转化成可被计算机执行的机器语言。 编译器设计 经典的三...

数据结构和算法

字符串匹配

BF(Brute Force)算法 朴素的模式匹配算法,从最开始开始比较,不相等就后移,然后重新比较,时间复杂度为O(N*M)。 KMP算法 KMP算法的核心就是避免不必要的回溯,问题的关键在模式串,而不是目标串。 i: 后缀 j: 前缀 NEXT数组:当模式匹配串T失配时,NEXT数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配。NEXT数组要根据模式匹配串T失配...

数据结构和算法

查找

概要 查找分为静态查找和动态查找。 静态查找:数据集合稳定,不需要添加删除元素 动态查找:数据集合在查找过程中需要同时添加或删除元素 静态查找 顺序查找 按照顺序进行比对,相等就是查找结果,不相等就没有结果。 时间复杂度:O(n)。 插值查找(按比例查找) 在折半查找的基础上,按比率进行查找,适用于数据量大且分布均匀的数据,否则效率低于折半查找...

数据结构和算法

概要 图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中G表示图,V表示图G中顶点的集合,E表示图G中边的集合。 无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边,用无序偶(Vi,Vj)或(Vj,Vi)来表示。 有向边:若顶点Vi到Vj之间的边有方向,则称这条边为有向边,也称弧,用有序偶<Vi,Vj>来表示,Vi称...

数据结构和算法

二叉树

概要 树:是n个结点的有限集。当n=0时称为空树。在任意一个非空树中: 有且仅有一个特定称为根的结点 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每个集合本身又是一棵树,并且称为根的子树。 度:结点拥有的子树数称为结点的度,树的度取树内各结点的度的最大值。 度为0的结点称为叶结点或终端结点 度不为0的结点称为...

数据结构和算法

线性表

概要 线性表:是一种逻辑结构,相同数据类型的n个数据元素的有限序列,除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继(大部分情况,循环链表不是)。 线性表特点 元素个数有限 逻辑上元素有先后次序 数据类型相同 仅讨论元素间的逻辑关系 从存储层面讲:线性表分为顺序存储和链式存储。 顺序存储 顺序表 使...

数据结构和算法

概述

按视点不同把数据结构分为逻辑结构和物理机构。 逻辑结构(数据之间的相互关系)包括: 集合结构:元素同属一个集合,相互之间平等没有联系 线性结构:数据之间线性链接 树形结构:一对多的层次关系 图形结构:多对多的关系 物理结构(存储方式)包括: 顺序存储结构:数据元素存放在地址连续的存储单元里 链式存储结构:数据元素存放在任意的存储单元里 ...

数据结构和算法

排序

概要 排序的稳定性 假设Ki=Kj(1<=i<=n,1<=j<=n,i!=j),且在排序前的序列中Ki领先于Kj(即i<j)。 如果,如果排序后Ki扔领先于Kj,则称所用的排序方法是稳定的。 反之,若可能使得排序后的序列中Kj领先于Ki,则称所用的排序方法是不稳定的。 排序算法分类 内排序:所有的排序操作都在内存中...

GPUImage

中文文档

概要 GPUImage框架是一个获得BSD许可的iOS库,可让您将GPU加速滤镜和其他效果应用于图像,实时摄像机视频和电影。与Core Image(iOS 5.0的一部分)相比,GPUImage允许您编写自己的自定义过滤器,支持部署到iOS 4.0,并且具有更简单的界面。但是,它目前缺少核心图像的一些更高级的功能,例如面部检测。 对于像处理图像或实时视频帧这样的大规模并行操作,GPU比C...

OpenGL系列教程

GLSL语言

参考 变量 GLSL的变量命名方式与C语言类似。变量的名称可以使用字母,数字以及下划线,但变量名不能以数字开头,还有变量名不能以gl_作为前缀,这个是GLSL保留的前缀,用于GLSL的内部变量。当然还有一些GLSL保留的名称是不能够作为变量的名称的。 基本类型 除了布尔型,整型,浮点型基本类型外,GLSL还引入了一些在着色器中经常用到的类型作为基本类型。这些基本类型都可以作为结构体内...