基于 javascript 学习并实现常用的经典算法,欢迎对算法和数学感兴趣的 Js 开发者参与,一起学习共同进步。

算法实现

  1. 排序

    1. 插入排序 sort/lib/insertion-sort.js
    2. 希尔排序 sort/lib/shell-sort.js
    3. 选择排序 sort/lib/selection-sort.js
    4. 堆排序 sort/lib/heap-sort.js
    5. 冒泡排序 sort/lib/bubble-sort.js
    6. 快速排序 sort/lib/quick-sort.js
    7. 合并排序 sort/lib/merge-sort.js
  2. 查找
    1. 顺序查找 search/sequence-search.js
    2. 二分查找实现 search/binary-search.js
    3. 插值查找 search/insert-value-search.js
    4. 斐波那契查找 search/fibonacci-search.js
    5. 哈希查找 search/hash-search.js
  3. 数据结构 DataStructures

算法分析

图文形式整理归纳该部分内容,需花费大量的时间和精力,且网上关于算法分析的高质量资料也非常多。因此,暂不对此节内容进行整理,可能的话,以后再不定期抽时间做相关补充。

数学基础

我们不一定有精力深入透彻的研究下列全部内容,但在算法分析开始前,概览下述内容绝对是非常有益的。

  1. 知识大纲

    1. 求和

      1. 求和公式及其性质
      2. 确定求和时间的界
    2. 离散数学内容
      1. 集合
      2. 关系
      3. 函数
    3. 计数与概率
      1. 计数
      2. 概率
      3. 离散随机变量
      4. 几何分布与二项分布
      5. 二项分布的尾部
    4. 矩阵
      1. 矩阵与矩阵运算
      2. 矩阵的基本性质
  2. Javascript Math Object
  3. 常用数学术语中英文对照表

计划清单

  1. 最大子数组问题
  2. 散列表
  3. 广度优先搜索
    总能找到最近的node
    图由节点和边组成,node and edge
  4. 狄克斯特拉算法
  5. 贝尔曼·福德算法
  6. 贪婪算法
  7. 旅行商问题
  8. NP完全问题
  9. 动态规划
    1. 01背包
  10. 最长公共子串
  11. 最长公共子序列
  12. 费曼算法
  13. K最近邻算法
  14. 朴素贝叶斯分类器
  15. 二叉树、 B树,红黑树,堆,伸展树
  16. 反向索引
  17. 傅里叶变换
  18. MapReduce
  19. Apache Hadoop
  20. Simhash
  21. Diffie-Hellman

参考资料

1. Website

  1. Better Explained —— Learn math without memorization. No cramming.
  2. Commoncraft —— Our Product is Explanation.
  3. GeeksforGeeks —— A computer science portal for geeks.

2. Book

  1. 算法图解 —— 像小说一样有趣的算法入门书
  2. Algorithms —— 中文版书名:《算法概论》,将任何具有初等数学基础的人引入算法应用与研究殿堂的引路石。
  3. Algorithms Fourth Edition —— 算法第四版 algs4.cs.princeton.edu
  4. Introduction to Algorithms —— Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein

写在后面

  1. 本文地址:https://www.cnblogs.com/kelsen/p/9387618.html
  2. 项目地址:Learn-Algorithms-With-Javascript

关于本文如果您有任何建议或疑问请在下面留言交流,也可通过 Web前端高级工程师 群进行线上沟通。

Learn Algorithms With Javascript - 基于 Js 进行算法学习的更多相关文章

  1. JS做深度学习1——偶然发现与入门

    JS做深度学习1--偶然发现与入门 不久前,我初次涉猎了Node.js,并且使用它开发了毕业设计的WEB模块,然后通过在Node中调用系统命令执行Python文件方式实现了深度学习功能模块的对接,Py ...

  2. JavaScript基于时间的动画算法

    转自:https://segmentfault.com/a/1190000002416071 前言 前段时间无聊或有聊地做了几个移动端的HTML5游戏.放在不同的移动端平台上进行测试后有了诡异的发现, ...

  3. 常见排序算法基于JS的实现

    一:冒泡排序 1. 原理 a. 从头开始比较相邻的两个待排序元素,如果前面元素大于后面元素,就将二个元素位置互换 b. 这样对序列的第0个元素到n-1个元素进行一次遍历后,最大的一个元素就“沉”到序列 ...

  4. 基于JS实现归并排序算法

    /*********************************************JS归并排序************************************************ ...

  5. 阅读:重新介绍 JavaScript(JS教程)

    这篇文章是记录自己阅读重新介绍 JavaScript(JS 教程)的记录和个人体会 在线调试代码工具:https://codepen.io/pen 引言 分歧根源:名字Javascript和Java有 ...

  6. [翻译]Review——Learn these core JavaScript concepts in just a few minutes

    Learn these core JavaScript concepts in just a few minutes(只需几分钟即可学习这些核心JavaScript概念) 原文地址:https://m ...

  7. 总结下js排序算法和乱序算法

    其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...

  8. Breach - HTML5 时代,基于 JS 编写的浏览器

    Breach 是一款属于 HTML5 时代的开源浏览器项目,,完全用 Javascript 编写的.免费.模块化.易于扩展.这个浏览器中的一切都是模块,Web 应用程序在其自己的进程运行.通过选择合适 ...

  9. javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例

    栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...

随机推荐

  1. [总结]其他杂项数学相关(定理&证明&板子)

    目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...

  2. C# Owin初探 概念理解(一)

    本文是阅读网上大牛的文章总结而成. 目录 1.Owin定义 2.为什么要用Owin 3.作用 4.总结 1.Owin定义 Owin是Open Web Interface For .NET.也就是.Ne ...

  3. MVC删除操作前confirm提示

    本段时间,忙于公司的ERP问题,博客也没有怎样更新了.昨晚于家中学习了MVC时,对删除记录前,让用户有后悔选择.即是说,能先给用户一个提示,然后再让用户决定是否删除记录.以前练习MVC,对删除记录,均 ...

  4. 使用 RabbitMQ 实现异步调用

    目录 引言 启动 RabbitMQ 服务器 运行 rabbitmq 容器 RabbitMQ 控制台 Exchange 和 Queue 开发服务端和客户端 开发服务端 开发客户端 Java Bean 类 ...

  5. windows下给redis添加密码

    在redis的安装目录下找到 redis.windows-service.conf 文件.用文本编辑器打开, 找到requirepass所在行,回车另起一行,输入requirepass 你的密码, # ...

  6. java 非阻塞算法实现基础:unsafe类介绍

    一.为什么要有Unsfae.我们为什么要了解这个类 1. java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 2.java的并发包中底层大量的使用这个类的功能 ...

  7. 如何在idea中设置Tomcat虚拟路径

    设置项目的根路径: 设置指定文件的在Tomcat中的虚拟路径: 代码: String fileName = MyFileUtil.getFileName(uploadFileName); File f ...

  8. POJ2186(强连通分量分解)

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35035   Accepted: 14278 De ...

  9. vue.js自定义指令详解

    写在文本前:相信在做vue的项目,你肯定接触了指令,我们常用vue内置的一些指令,比如v-model,v-text,v-if,v-show等等,但是这些内置指令不在本文的讲解范畴,本文想说的是其自定义 ...

  10. require.js的基本概念及使用流程(1)

    今天,我们来说一说requireJS的基本概念,在下一篇随笔中我们再去讨论讨论requireJS的使用步骤 这一篇都是一些概念性比较强的东西,希望大家擦亮自己的钛合金狗眼好好看看概念,好吧 首先,什么 ...