CSS学习笔记:可视化格式模型

浮动、定位和盒模型是CSS三个最重要的基础概念,也是非常容易混淆和难掌握的概念。这些概念用于控制在页面上摆放和显示元素的方式,形成CSS基本布局。本文将介绍盒模型概念,外边距叠加,绝对定位和相对定位的差异,以及浮动和清理如何工作等。

CSS学习笔记:选择器

要将CSS样式应用于特定的HTML元素,需要想办法找到这个元素。在CSS中,执行这一任务的样式规则成为样式选择器(selector)。本文将介绍CSS常用选择器、高级选择器,层叠与特殊性计算,以及如何组织和维护样式表等内容。

CSS学习笔记:基本原则

CSS

本文记录一些CSS的基本的但常常被误解的概念,并讨论如何让HTML和CSS保持清晰且结构良好,内容包括设计代码的结构、有意义文档的重要性、命名约定、何时使用ID和类名、文档类型和浏览器模式等。

算法学习笔记:顺序统计量

在一个由n个元素组成的集合中,第i个顺序统计量(order statistics)是该集合中第i小的元素,例如第1个顺序统计量是最小值,第n/2个顺序统计量是中位数(当n是偶数时,中位数一般指i=n/2的那个数)。顺序统计量问题就是给定包含n个(互异的)数的集合和整数i,找出第i小的数。

解决这个问题最直接的办法就是先排序,再直接找出第i个元素即可,排序最快的时间复杂度是$O(n \log n)$。但其实还可以更快地找到第i个顺序统计量,本文将主要介绍一个实用的随机算法和确定性算法,它们都可以在$O(n)$的时间内解决这个问题。

算法学习笔记:堆排序

相比归并排序和快速排序,本文将介绍另一种平均时间复杂度是$O(n \log n)$的排序方法——堆排序(Heap Sort)。堆排序使用了一种被称为“堆”的数据结构,这也是它相比其他两种排序方法的特殊之处。堆这种数据结构不仅可以用于排序,也可以用来维护优先级队列。本文最后还简要对比了快速排序和堆排序的优缺点。

算法学习笔记:快速排序

通常算法初学者都会接触到形形色色的排序算法,例如插入排序、选择排序、冒泡排序等等,这些排序算法都非常容易理解和上手,但是它们的时间复杂度是$O(n^2)$的。本文将介绍快速排序,同归并排序一样,它的时间复杂度是$O(n \log n)$。

对于包含n个数的输入数组来说,快速排序是一种最坏情况运行时间为$O(n^2)$的算法,但它通常是实际应用中最常用的排序算法,因为它的平均性能是$O(n \log n)$的,而且隐含的常数因子非常小,并能够进行原址排序。

算法学习笔记:主方法

上一篇算法学习笔记:分治法中,介绍了分治法及一些常见的分治法案例。其中递归式与分治方法是紧密相关的,因为使用递归式可以很自然地刻画分治算法的运行时间。一般来说,求解递归式有“代入法”,“递归树法”和“主方法”。其中主方法用于方便地求解形如$T(n)=aT(n/b)+f(n)$的递归式。

本文将介绍主方法的一个“简化版本”,虽然是简化的,但它依然可以满足日常大多数的算法分析,并且更好理解其含义,最后再给出一个主方法的简要证明过程。

算法学习笔记:分治法

在计算机科学中,分治法是一种很重要的算法。分治法字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如归并排序、快速傅立叶变换等。

本文将简要介绍分治法的基本步骤,再以归并排序为例,介绍分治法的具体应用以及如何分析其时间复杂度。最后再介绍几个用分治法解决的算法案例。

算法学习笔记:渐进分析

当算法问题的规模很小的时候,基本上在任何一台机器上都会以很快的速度计算出来,只有在问题规模较大的时候分析算法的效率才显得有意义。因此我们要研究算法的渐进效率,也就是关心问题的输入规模趋向无穷大时,算法的运行时间是如何增长的。

本文将以插入排序为例,简要分析其运行时间。这种分析将引入一种关注时间如何随着输入规模增加而增加的记号。在此基础上,再给出几种标准方法来简化算法的渐进分析。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器