0%

海伦公式

$$ S = \sqrt{p(p-a)(p-b)(p-c)} $$

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下海伦公式求得,其中p为半周长(周长的一半)$p=\frac{a+b+c}{2}$

阅读全文 »

凸包算法

背景

凸包算法其实是一个挺常用的算法,例如在这道题(812.最大三角形面积)中,常规的解决方案就是写一个时间复杂度O(N^3)的暴力算法去枚举所有可能出现的三角形,再利用海伦公式去求得三角形面积。不妨我们大胆假设,在一堆点的集合中,其中面积最大的三角形的顶点,必然位于这些点的凸包上。论证我们先跳过,直接用结果去验证假设是否成立(经验证,假设是成立的)

简介

凸包算法有很多种,例如

  1. Graham扫描法 nlogn
  2. Jarvis步进法 nH (H为凸包上的点 最差情况会退化成 n^2)
  3. 分治法 nlogn
  4. 穷举法 n^3 (两点确定一条直线,如果剩余的其它点都在这条直线的同一侧,则这两个点是凸包上的点,否则就不是)
  5. Melkman算法 (基于双向链表来做的,具体没看懂)

这里详细介绍常规的 Graham扫描法,Graham扫描法时间复杂度优于Jarvis步进法,理解起来稍微比之困难一些,但影响不大。

阅读全文 »

WSL初探

特色

  1. ip共享 win下启动的web服务wsl可直接访问。
  2. 资源共享 win下 及 wsl下访问资源占用情况均为物理机的资源占用情况。
  3. 支持docker
阅读全文 »

样式文件的动态引用

背景

要实现一个主题切换功能,通常的解决方案是替换css文件,由此就引出了样式文件的动态引用。样式文件的动态引用普遍有两种方式。

阅读全文 »

泛洪算法 Flood Fill

简介

泛洪算法——Flood Fill,(也称为种子填充——Seed Fill)是一种算法,用于确定连接到多维数组中给定节点的区域。 它被用在油漆程序的“桶”填充工具中,用于填充具有不同颜色的连接的,颜色相似的区域,并且在诸如围棋(Go)和扫雷(Minesweeper)之类的游戏中用于确定哪些块被清除。泛洪算法的基本原理就是从一个像素点出发,以此向周边相同或相似的像素点扩充着色,直到周边无相同颜色的区块或到图像边界为止。

泛洪填充算法采用三个参数:起始节点(start node),目标颜色(target color)和替换颜色(replacement color)。 该算法查找阵列中通过目标颜色的路径连接到起始节点的所有节点,并将它们更改为替换颜色。 可以通过多种方式构建泛洪填充算法,但它们都明确地或隐式地使用队列或堆栈数据结构。

阅读全文 »

机器学习算法学习思路

机器学习的算法相对都比较抽象,需要一定的数学功底,这里简单的列一下机器学习算法学习思路,这个应该按照什么个流程去学习收获最快。

流程: 目的→输入输出→思想→流程→代码→原理→数学依据。

大白话版:干啥的→干了啥→怎么干→为什么可以这么干。

大致可以按照上述流程去执行。

首先了解这个算法的目的,解决他是干啥的这个问题,再去了解它的输入输出,这其实是解决了它干了啥这个问题。到这里算是解决了这个算法怎么用的问题,做到了能用

了解完它的输入输出之后可以去了解这个算法的思想执行过程代码。这部分可以总结成怎么干。到这部分其实算是对算法有了一个具体认知。知道数据集和各个参数具体对结果造成了那些影响。算是做到会用

之后可以尝试了解算法的原理,看懂数学公式算是了解原理,理解推倒过程算是了解数据依据。这一大步是在解决为什么可以这么干的问题。这一步走完算是掌握

K-Means

简介

K-Means算法是无监督聚类算法,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

输入输出

K-Means是根据样本之间距离的大小来判断是否属于同一个簇的,所以样本必须能够计算距离,即必须包含坐标信息。将样本集划分为K个簇,即参数为K。

输入依赖: 包含坐标信息的样本集、要划分为K个簇的K值输出:给样本集标注每个样本分别属于哪一个K簇

思想

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

阅读全文 »

从URL到页面渲染

每一个搞web开发都需要了解的知识,长期更新不断完善

从URL到网络请求

  1. 解析URL解析URL的协议名,域名,端口号,路径,查询参数(?),哈希值(# )等。

  2. DNS解析如果有相应的浏览器缓存或本地缓存,则直接使用缓存,不进行DNS解析。如果没有相应的DNS缓存,则访问DNS服务器,进行DNS解析,查询出域名对应的IP地址。

  3. 建立TCP/IP连接:通过三次握手建立与服务器的连接(长连接或短连接),在此之后发送具体的请求到服务器,等待服务器的响应。浏览器根据请求作出应答,返回数据包。最后当关闭连接时,双方进行通过四次挥手断开连接。

页面渲染

浏览器渲染流程

浏览器的主要功能就是向服务端发送请求,下载解析资源显示在浏览器上。将网页内容展示到浏览器上的过程,这其实就是渲染引擎完成的。渲染引擎有很多种,这里以 webkit 为例。

WebKit 渲染引擎的主流程

从上面这个图上,我们可以看到,浏览器渲染流程如下:

  1. 解析 HTML Source,生成 DOM 树。
  2. 解析 CSS,生成 CSSOM 树。
  3. 将 DOM 树和 CSSOM 树结合,去除不可见元素,生成渲染树( Render Tree )。
  4. Layout (布局):根据生成的渲染树,进行布局( Layout ),得到节点的几何信息(宽度、高度和位置等)。
  5. Painting (重绘):根据渲染树以及回流得到的几何信息,将 Render Tree 的每个像素渲染到屏幕上。
阅读全文 »

Rsync命令参数详解

在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

Rsync的命令格式可以为以下六种:

阅读全文 »

背景

随着可视化需求的增多,以及可视化行业商业化的发展。从前小作坊式的纯手工生产不能再满足大量的业务需求,这时一些业界优秀的企业纷纷开始了对可视化页面的工业化生产。本文粗略的介绍一些可视化前端的工业化体系。

阅读全文 »