自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 PHP针对联合主键缓存的坑

问题:对于PHP来说,基于hash结构的array是万能的,因此在设计表的抽象的时候,用$pk = array('field1', 'field2');这样的语句来设置主键。在需要存入Redis时,将$pk用某种形式展开成字符串作为Key存入Redis。但是在实际过程中,总是出现缓存找不到的情况。定位调试了很长时间,找到原因如下:在针对联合主键查询时,以右边的方式传递联合主键的参数:$obje...

2018-12-23 21:32:42 276

原创 操作系统学习笔记之处理器调度

处理器调度问题的核心问题有“保证资源利用率“(最重要的也就是CPU利用率)、公平性和平衡性。对于不同类型的调度,批处理、分时系统、实时系统,具体的调度方法和策略有一些不同。 评价调度的好坏有几个概念: (1)周转时间:从作业(进程)到达开始计时,直到作业被完成的时间; (2)平均周转时间:就是所有作业的周转时间的算术平均值 (3)带权周转时间:周转时间比上实际在CPU上运行的时间 (4)...

2018-03-28 21:17:13 251

原创 Discuz WinCache + yac

服务器跑的Windows Server 2012R2,PHP v5.3.28。并不自带操作码缓存,因此使用wincache加速PHP执行。不过winCache自带User-data-cache缓存,这样导致Discuz默认选取其当作数据缓存。我这个实际情况里面出现了wincache 导致forum.php异常加载时间长。分析问题出在数据缓存失效了。可能是wincache的bug。后来发现鸟哥的yac

2018-03-28 18:57:17 507

原创 线性代数复习——《程序员的数学线性代数》读书笔记(1)向量、矩阵、行列式

向量向量的定义 向量的运算法则:加法、数乘、转置 向量的运算律:加法交换律、加法结合律、数乘结合律 零向量的定义:所有元素都是0 向量的几何解释 基的概念 向量组构成基的条件:线性无关,且该线性空间中所有向量都能够由这组向量表示(线性空间中所有向量的极大无关组)。矩阵矩阵的定义 几种特殊的矩阵:零矩阵OO,单位矩阵EE,对角阵Λ\Lambda。 矩阵的运算:加法、数

2018-01-20 12:15:06 1009

原创 10.3交换排序(2)快速排序

基本思想快速排序也是一个典型的分治思想(divide and conquer)的运用。对于分治法需要了解如下的一个流程: 1.将当前的大问题分解成若干个子问题 2.解决每一个子问题 3.合并子问题的解 对于运用到数组的排序来说,很显然可以将数组一分为二,分别将其左右排序完成后,再对整个数组进行排序。上面描述的便是归并排序的一般思路。 而对于快速排序则略有不同:先选取一个枢轴量pivot,将

2018-01-19 18:49:43 297

原创 10.3 交换排序(1)冒泡排序

基本思想冒泡排序的思想和其名字一样直观,把整个表看作一个水池,数据看作石头,重的自然沉下去而轻的会浮上来。当然在程序里面,直接沉下去和直接浮上来都是不可能的,因此冒泡排序就是相邻元素进行比较,如果逆序了,就相互交换,如此迭代直到序列有序为止。 冒泡排序每次迭代产生的有序区都是有序的(注意参考下面的实现理解)。实现template<typename _Ty>void bubble_sort(std

2018-01-18 15:52:03 205

原创 10.2 插入排序(2)

核心思想希尔排序(Shell Sort)是Donald Shell命名的,是第一个突破O(n2)O(n^2)时间的排序算法之一。希尔排序的核心在于选取恰当的增量dd,对于线性表A[1..n]A[1..n],对任意的t∈[1,n]t\in [1,n]取A[t],A[t+d],A[t+2d],...A[t],A[t+d],A[t+2d],...看作是新的表,将其进行一次插入排序,然后缩小增量dd,再如法

2017-12-29 11:15:32 187

原创 10.2 插入排序(1)

基本思想插入排序的基本思想在于维护一个有序区,依次在线性表中向后扫描元素,将其插入在这个有序区的合适位置。 下面讨论具体算法:设一线性表A[1..n]A[1..n]。我们令循环变量ii从22到nn。利用循环变量ii便将线性表划分为两个部分A[1..i−1]A[1..i-1]和A[i,n]A[i,n]。在每趟循环执行前,A[1..i−1]A[1..i-1]都是局部有序的。因此在每趟循环过程中,我们的

2017-12-27 20:04:20 139

原创 10.1 内排序综述

由于自己比较懒,之前一直没有跟着写博客,学习进度其实也落下不少。正好赶上期末复习,就打乱了顺序,草草结束第七章树之后,先跳到第十章内排序来写。内排序相关概念排序(sort)是指将一个表,按照关键字形成一个递增或者递减的序列。关键字应该满足偏序关系。所谓内排序就是指所有数据都是在内存中进行排序的,不需要进行内外存数据交换。 排序的稳定性是指,相同的关键字在排序前后,相对次序是否发生变化。如果不变,

2017-12-27 16:51:45 169

原创 7.8 最优二叉树与哈夫曼编码

最优二叉树定义对于一棵树,可以将每一个结点赋一个数值,称之为结点的权重(weight),简称权。定义一棵树上某个结点ViV_i的带权路径长度(weighted path length)为从根节点到该结点的路径长度lil_i与该结点上权重wiw_i的乘积。一棵树的带权路径长度是指所有结点的带权路径长度之和,即L=∑n0i=1wiliL=\sum_{i=1}^{n_0}w_il_i,其中n0n_0是叶子

2017-12-26 19:51:37 3400

原创 7.7 线索二叉树

为什么要创建线索二叉树对于普通含有nn个结点的二叉树来说,一共含有2n2n个指针域,而实际上,树的顶点集中元素的个数VV和边集中元素的个数EE的关系满足|V|=|E|+1|V|=|E|+1,也就是说在上述二叉树中n=e+1n=e+1,得e=n−1e=n-1,共n−1n-1条边,于是只需要n−1n-1个指针就可以刻画这颗二叉树了。但是在采用二叉链存储结构的二叉树来说,对于大多数语言来说,声明一个二叉树

2017-12-21 23:04:46 252

原创 7.4 7.5 二叉树的基本操作与遍历

二叉树类定义这里的二叉树使用了典型的二叉链实现方法:分为左右两个孩子链。这里和之前的链表实现一样,使用了类内定义的结点结构体BinaryTreeNode。考虑到插入和删除对于位置的要求比较复杂,因此在此处的二叉树实现中并没有包含(在二叉搜索树中,插入和删除是一个重点过程);同时考虑到这是一个原型二叉树,因此也没有使用泛型,对于树的结点的值的类型默认定义为字符串类型。事实上,对于建立二叉树的构造函数,

2017-11-16 17:00:31 359

原创 连续型随机变量

分布函数与密度函数设分布函数F(x)F(x),则密度函数f(x)f(x)定义为 F(x)=∫x−∞f(t)dtF(x)=\int ^x _{-∞}f(t) \mathrm dt 密度函数两条基本性质非负性:∀x,f(x)≥0\forall x, f(x)≥0正则性:∫+∞−∞f(x)dx=1\int ^{+∞}_{-∞}f(x)\mathrm dx=1密度函数上改变有限个点并不影响。求连续

2017-11-13 22:40:03 747

原创 7.2 7.3 二叉树的概念和性质、存储

基本概念二叉树定义二叉树的递归定义: 一颗空树或者单个结点构成的树是一颗二叉树; 除此之外,一棵二叉树有两颗互不相交的二叉树(分别称为左子树和右子树)构成。 需要区分二叉树和二次树的概念。二次树一定是二叉树(当然二次树不区分左右孩子),反之不一定成立。因为一棵一边倒的树可以是二叉树,但是二次树必须要求存在一个度为2的结点。 对于满二叉树和完全二叉树只给出形式化描述:满二叉树(f

2017-11-12 17:37:00 218

原创 7.1 树的基本概念、性质与运算

树的基本概念定义 树是由nn个结点(或元素)组成的有限集合。通常用符号TT表示。 当n=0n=0时,称为空树; 当n>0n>0时,有一个根结点(root),由根结点又指向有限个互不相交的子集TiT_i,这些子集同样也是一颗树,称为子树(sub tree)。树是一种利用递归定义的。通常用来表示具有层次的数据。树是具有一对多的关系,可以由图转化来(图的生成树(spanning tree

2017-11-11 00:24:07 605

原创 6.1 6.2 数组、稀疏矩阵

数组数组的一般定义数组是一种由相同数据类型构成的序列。数组的本质就是一个线性表。对于一维数组,该线性表中的元素类型就是需要存放的类型ElementType,对于多维数组,其维度d≥2d≥2,则可以认为线性表的元素类型是d−1d-1维数组。这样来看,数组也是一种递归的定义。 对于数组来说,通常只有以下两种操作:读取和写入。这两种操作需要一个输入向量来表示下标(即用来定位)。 数组中最常见的是一维数

2017-10-30 21:40:25 383

原创 第五章 递归综合习题(leetcode)

下面例举了一些leetcode上面的一些习题,作为前一篇内容的补充。没有涉及到动态规划、分治法的题目,因为那些题目难度都比较大^^。 这些题目主要讲解如何根据书上的三种类型,设计递归算法。对于递归定义,这里选择了一道快速幂的题目;对于递归数据结构,这里超前使用了第7章的二叉树而不是使用之前的链表(线性数据结构使用递归并没有太大的意义,直接使用迭代基本上是很方便了),虽然超前但是应该也很容易明白;对

2017-10-23 22:43:38 982

原创 第5章 递归算法设计

基本概念在定义一个函数时,出现调用自身函数的,称为递归(recursion)。如果一个递归函数,最后一条语句是递归调用语句,则称这种递归调用为尾递归(tail recursion)。一个递归模型通常有两部分构成:初值(递归出口)和递归体。递归的使用条件递归的数学定义,比如斐波那契数列:F(1)=F(2)=1,F(n)=F(n−1)+F(n−2),n≥3F(1)=F(2)=1,F(n)=F(

2017-10-21 20:22:46 1521

原创 几种离散随机变量

概率统计之几种离散随机变量

2017-10-20 13:48:36 6156 1

原创 第4章 字符串综合习题(leetcode)

数据结构课程第四章 字符串 Leetcode的一些不错的习题,作为补充

2017-10-17 22:21:46 439

原创 浮点数的运算

规格化的浮点数因为存储是使用类似科学计数法的表示,因此计算方法大体上与科学计数法较为类似。浮点加减法浮点加减法的一般步骤(减法本质也是加法): 对于二进制形式的两个浮点数相加 1. 对阶:对于两个规格化浮点数,将较小的指数的数向较大指数的数对齐。通过移动小数点实现。如果出现有效数字位数不能满足的情况,进行近似。 2. 相加尾数(有效数):将两个二进制数的尾数相加。 3. 规格化处理:对已经求

2017-10-16 20:05:19 1231

原创 4.2 字符串模式匹配

字符串的两种模式匹配方式:朴素算法、KMP算法。

2017-10-15 19:30:09 217

原创 4.1 字符串及其表示

总述基本概念 (字符)串(string)是指由零个或者多个元素(字符)组成的有限的序列。序列中所含的字符的个数称为该串的长度(教材中讨论的都是基于ASCII编码的字符串的长度,这里不讨论Unicode、GBK等多字节宽字符的情况)。 含有零个字符的串称为空串。通常将字符串用双引号括起来表示,如"a1a2a3...an""a_1a_2a_3...a_n",与大多数编程语言的习惯一致。也经常将字符串

2017-10-10 23:42:57 3919

原创 第3章 栈和队列综合习题(leetcode+vjudge)

这里选择了一些栈和队列的练习,一部分来自leetcode,也有一部分通过vjudge 取自其他平台。没有选择综合性较强的题目,单纯使用栈、队列、线性表的基本操作和思想就可以解决了。 对于双端队列和优先队列,这里仅仅使用STL进行解决,说明一下使用他们进行解决的办法,不提及物理实现及相关问题。双端队列的物理实现可以使用带尾结点的链表;而优先队列需要使用二叉堆(binary heap)实现,这在第1

2017-10-06 10:17:40 1138

原创 3.2 队列

队列(queue)是一种只能在某一段进行插入,在另一端进行删除的线性表。将进行插入和删除的两端分别称为队首(front)和队尾(rear)。将元素进入队列成为入队(enqueue),将元素从队列中删除成为出队(dequeue)。队列具有FIFO(First In, First Out)的特性。队列的基本操作 名称 作用 cr

2017-10-01 20:39:03 217

原创 Discuz!X json输出解析后模板

利用php的输出缓冲拦截discuz template函数解析的模板,将其放入json

2017-09-30 16:45:37 1100

原创 PHP上传图片并缩放

php服务端处理上传图片并缩放的代码笔记。

2017-09-30 16:14:35 956

转载 Writing a sort comparison function

比较函数的一点注意事项

2017-09-29 11:25:25 173

原创 3.1 栈及其基本应用

栈的基本定义、操作栈的链表、顺序表实现栈的一些基础应用

2017-09-25 23:00:52 299

原创 第2章 线性表综合习题(leetcode)

线性表(单链表、数组)一些leetcode的习题。作为第二章的补充练习。

2017-09-24 22:48:21 444

原创 定点整数加减法

1.补码加法的性质:补码的和等于和的补码。 进行补码加法时,符号位参与运算。最后把超出的进位丢掉。 2.补码减法依然转化为加法来做。一个补码表示的数的相反数,可以“逐位取反再加一”得到。 3.溢出(overflow)检测:正+正<0,或者负+负>0,为溢出。有两种检测方法: (1)双符号位变形补码法。 设nn位二进制有符号整数,则结果利用n+1n+1位整数表示。 结果保留两位符号位(第n

2017-09-23 18:59:26 972

原创 2.5 有序表

有序表(ordered list)是指所有元素按照递增或者递减的方式组织的线性表。 一些数据结构教材中,没有单独将有序表列出来讲解,因为有序表实际上只是线性表的一种特殊形式,大多数操作与线性表无异,只是插入和删除需要维护其有序性。 大多数情况下,有序表只需要对普通线性表执行一次排序操作就可以得到。 有序表最重要的操作是二路归并。前面提到过二路归并排序算法的分析,其中核心的操作就是二路归并。

2017-09-23 10:19:23 376

原创 2.3 线性表的链式存储结构(链表)

基本概念和特点链表的定义-线性表的链式存储结构称之为链表(linked list)。链表包括两部分构成:数据域和指针域。数据域保存数据元素,指针域描述数据元素的逻辑关系。 - 链表通常使用带头结点的表示。指向头结点的指针称之为头指针(head pointer),指向最后一个结点(也就是尾结点)的指针称之为尾指针(tail pointer)。 - 链表不具备随机存取特性。 - 存储密度

2017-09-20 00:38:43 1269

原创 2.2线性表的顺序存储结构

线性表使用顺序存储结构进行描述,并分析一些基本算法,以及学习总结

2017-09-16 19:06:30 471

原创 2.1 线性表的定义、逻辑结构、基本操作

李春葆《数据结构教程》2.1 线性表的定义、逻辑结构和基本操作

2017-09-16 17:35:23 424

原创 整数与浮点数的表示

有符号整数的三种编码形式相关计算方法浮点数的IEEE754表示

2017-09-14 16:04:05 1468

原创 《数据结构》课程绪论

李春葆《数据结构教程》第一章绪论 数据结构的相关概念,及算法的时间(空间)复杂度分析

2017-09-13 18:27:49 445

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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