最小生成树 prim 算法的 js 实现

最小生成树 prim 算法的 JavaScript 实现

说明:以下示例请在较新的浏览器中查看,因为用了 class 语法。

写这篇文章的缘起

在 pcb 设计中,有一种东西叫飞线,他的生成原理主要就是使用了最小生成树算法。最小生成树是什么效果,可以看下面的例子。想知道飞线的具体应用可点击这里。工作中有用到,那必须得学习。

飞线也称跳线,是指印刷电路板上因设计缺陷、测试目的或是其他设计考量,将电路板上的两个节点直接用电线连通的一种方法。

维基百科
继续阅读“最小生成树 prim 算法的 js 实现”

文件上传进度和解析 Form Data

最近有一个小需求:上传文件的时候显示上传进度(上传了百分之多少)。这个需求不难,比如以下代码就能实现:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Upload file</title>
    <script>
      function uploadFile() {
        var fd = new FormData(document.forms[0]);
        var xhr = new XMLHttpRequest();

        xhr.upload.onprogress = function (e) {
          console.log('e.loaded:' + e.loaded + ', e.total:' + e.total)
          console.log(Math.round(e.loaded / e.total * 100) + '%') // 这里是上传进度
        }

        xhr.onreadystatechange = function(){
          if ( xhr.readyState === 4 ) {
            if ( xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 ) {
              console.log(xhr.responseText)
            }
          }
        }

        xhr.open("POST", "/");
        xhr.send(fd);
      }
    </script>
  </head>
  <body>
    <form action="/" method="POST" enctype="multipart/form-data">
      <input type="file" name="file" id="file" required />
      <input type="hidden" value="1" name="hidden">
      <input type="text" name="text">
      <input type="range" name="range">
      <button onclick="uploadFile();" type="button" id="upload">Upload</button>
    </form>
  </body>
</html>

继续阅读“文件上传进度和解析 Form Data”

由 PHP7 和 Nginx 配置导致的 502 错误解决办法

最近有点懒,中午过了一点半还没有做饭吃,所以接下来捯饬的事情肯定不是吃饱了撑。

WordPress 最近发布了 5.2 的版本,对 PHP 的最低要求是 5.6.20,我的是 5.6.18,毕竟是 2016 年安装的 PHP 了,所以我想更新到 PHP7,据说 PHP7 更快。我们从 php 上又一次看到了时间流逝的痕迹,这也意味着我的网站已经运行 3 年了。 继续阅读“由 PHP7 和 Nginx 配置导致的 502 错误解决办法”

在 svg 中学习点到直线(线段)的最短距离算法

怎么计算点到直线的最短距离?学过数学的都会觉得这个话题不难,然而真正在编程中实操起来,还是有点不对劲的。你会觉得小时候,我的数学打过满分呐,现在这些知识却全都忘记了。 继续阅读“在 svg 中学习点到直线(线段)的最短距离算法”

svg 学习

最近在学习 svg,写了一些 demo,记在这里,还挺有意思的。

以一张 svg 开头:

zengxiaoluan.com

d3 中的 domain 和 range

以下内容更新于 2019-06-14

最近一直在用 d3 画双通道示波器,因为不是很理解 d3 的原理,走了不少弯路,如果大家有兴趣学习 d3,可以看看这个示例,帮我们更好的理解 d3 的一些基础 API,实现我们想要的效果。

标签 text 、tspan

示例中的图形是一个正弦函数,公式如下:

$y = asin(bx + c)$

公式中的 a、b、c 如何影响图形,我就不解释了,我先回去翻一下高中课本。

See the Pen svg-text/tspan by zeng (@zengxiaoluan) on CodePen.

继续阅读“svg 学习”

generator 和异步回调

在我们日常的前端开发中,异步回调是不可避免的操作,会严重影响我们的编程体验和代码的维护性、阅读性,而 promise 和 generator 可以在一定程度上解决这个问题。它们没有那么神奇,只是代码上的一些小花招,现在我们具体来看看 generator 是如何解决异步回调的问题。

继续阅读“generator 和异步回调”

一些排序算法

记得有一个明星程序员说,做一个 web developer 是不用学习数学的。那么自然也不用学习算法了。作为一个前端,在实际工作中确实很少实现什么排序算法,因为在 JavaScript 的语言层面,就已经实现 sort 函数了。但是学习这些排序算法,依然有助于我们理解这些语言相关内置函数的原理。 继续阅读“一些排序算法”

贪心算法 – JavaScript 描述

理解贪心算法的本质并不难,我们都很贪心。比如说,桌子上有 5 张人民币,面额分别是 100、50、20、10、5,但是按照要求我们只能选 3 张,那这 3 张怎么选呢?傻子都知道,我们肯定选面额大的。这就是贪心算法,每一步都是当下选择的最优解。

下面我们来看一些具体的问题。

继续阅读“贪心算法 – JavaScript 描述”

动态规划(Dynamic programming)— JavaScript 描述

《数据结构与算法 JavaScript 描述》这本书错误好多,为什么译者不把这些错误纠正呢?

在工作中,我们都用过递归,用俗话说就是函数自己调用自己;而动态规划一般被认为是和递归相反的一种解决问题的思路:递归是从解决一个大问题开始,通过逐步解决一些小问题,来使最终的问题得到解决;动态规划的思路则恰恰相反。

继续阅读“动态规划(Dynamic programming)— JavaScript 描述”

阿笠博士的兔子

这是公司 ctf 活动分值最高的一个题目,是这样说的:

柯南立刻想起阿笠博士培养出一对繁殖能力超强的兔子(雌雄),这种兔子嗅觉特别好,能快速找到丢失的镇馆之宝,这种兔子出生后一个月就会成年,成年的兔子再过一个月会生一对(雌雄)兔子,并且之后的每个月都会生一对兔子,兔子不会死亡,由于这种兔子一生只有一个伴侣,当兔子数量(对)越多对找回的镇馆之宝帮助最大,阿笠博士想知道当兔子数量(对)第11次出现素数之后过再128个月有多少对兔子,机智你能帮阿笠博士算出来吗?

当时应该没有人做出来,仔细分析一下,就是一个斐波那契数列加素数的判断,本身并不难。即便如此,我今晚也花了近三个小时在调试下面几行 js 代码。惭愧、惭愧,实在为自己的数学能力堪忧,还说要去考研······

继续阅读“阿笠博士的兔子”