前段时间学习算法方面的知识看了一下用C语言写的一些简单的算法自己用js模拟实现一遍现在整理出来和大家分享一下。

  1. 河内塔
  2. 斐波那契数列
  3. 巴斯卡三角形
  4. 三色棋

河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时
北越的首都,即现在的胡志明市;1883年法国数学家Edouard Lucas曾提及这个故事,据说创世
纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64
个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根
石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬
运完毕之时,此塔将毁损,而也就是世界末日来临之时。

     let hanoi = function(n,a,b,c){
         if( n == 1 ){
             console.log( n,a,c )
         }else{
             hanoi( n -1 ,a,b,c );
             console.log( n,a,c );
             hanoi( n-1,b,a,c );
         }
     }
   hanoi( 3,'a','b','c' );

Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免
子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三
只免子,三个月后有五只免子(小免子投入生产)......。
如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生
产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般习惯称之为费氏数列,例
如以下: 1、1 、2、3、5、8、13、21、34、55、89......

   //递归
   let fibonacci = function(n){
       if( n == 1 || n == 2 ) return 1;

       return fibonacci(n - 1 ) + fibonacci( n - 2 );
   }
 //  console.log( fibonacci(10) );
   //非递归
   let fib = function(n){
     //第i项为前两项之和
       var res = [1,1];
       if( n == 1 || n ==2 ){
         return 1;
       }
       for( var i = 2; i < n; i++ ){
         res[i] = res[i - 1] + res[i - 2];
       }
       return res[n - 1];
   }
   console.log( fib( 5 ) );

巴斯卡三角形

   let combi = function (n,r){

       var i,p = 1;
       for( i=1; i<= r;i++ ){
           p = p* ( n - i + 1 )/i;

       }
         return p;
 }

 let paint = function(N){
     var n,r,t;
     for( n = 0;n <= N; n++ ){
       for( r = 0;r <= n;r++ ){
            //排版设定开始
             if( r == 0 ){
                 var i;
               for( i = 0;i <= (N - n);i++ ){
               document.write("&nbsp;&nbsp;");
               }
             }else{
                 document.write("&nbsp;&nbsp;");
             }//排版设定结束
             document.write(combi(n,r));
       }
       document.write( "<br/>" );
     }
 }
     paint( 5)
   console.log( "%30d",5 );

AlgorithmGossip:三色棋

三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为Dutch Nation Flag(Dijkstra为荷兰
人),而多数的作者则使用Three-Color Flag来称之。
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您
希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上
进行这个动作,而且一次只能调换两个旗子。

  //交换函数
     let swap = function(obj,x,y){
         var temp = obj[x];
           obj[x] = obj[y];
           obj[y] = temp;

     }

     let threeColorFlags = function(){
         var color = ['r','w','b','w','w','b','r','b','w','r'];
         var leftColor = 'b';
         var rightColor = 'r';
         var lindex = 0,rindex = color.length - 1;
         for( var i = 0 ; i <= rindex;i++ ){

             if( color[i] ==  leftColor){
                 swap( color,lindex,i );
                 lindex++;
             }else if ( color[i] == rightColor ){

                 while( rindex > i ){
                     if( color[rindex] == rightColor){
                         rindex--;
                     }else{
                         break;
                     }
                 }
                 swap( color,rindex,i );
                 rindex--;
                 i--;
             }
         }
           console.log( color );
     }
   threeColorFlags();

未完结持续更新。。。。

javascript 算法的更多相关文章

  1. 【原】小搞一下 javascript算法

    前言:在前端大全中看到这句话,以此共勉.基础决定你可能达到的高度, 而业务决定了你的最低瓶颈 其实javascript算法在平时的编码中用处不大,不过不妨碍我们学习它,学习一下这些算法的思想,锻炼一下 ...

  2. JavaScript算法题之–随机数的生成

    JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2      ...

  3. javascript算法汇总(持续更新中)

    1. 线性查找 <!doctype html> <html lang="en"> <head> <meta charset="U ...

  4. JavaScript算法与数据结构知识点记录

    JavaScript算法与数据结构知识点记录 zhanweifu

  5. JavaScript 算法与数据结构(转载)

    JavaScript 算法与数据结构 https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md

  6. JavaScript算法(归并排序与快速排序)

    归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...

  7. JavaScript算法(冒泡排序、选择排序与插入排序)

    冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...

  8. javascript算法挑战

    1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) ...

  9. JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的 ...

  10. FCC上的javascript算法题之中级篇

    FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...

随机推荐

  1. 自定义带弹性效果的pageControl

    分三部分实现,在drawrect方法里画出灰色背景,根据pageCount创建对应个数的dotView放置在对应位置,并隐藏,创建一个CAShapeView类型的layer,根据scrollView的 ...

  2. java基础知识2

    58.线程的基本概念.线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身.Java中的线程有四种状态分别是:运行.就绪.挂 ...

  3. 何时可以开启透明数据加密(TDE)?

    TDE可以为我们的数据库提供加密保护,但是,不是任何情况下都可以随意开启TDE的,同时开启TDE后,我们的数据库维护管理工作也需要进行一些调整. 下面我们就先看看开启TDE需要的条件吧! 无法正常开启 ...

  4. SlimDX和WPF的合作应用

    1.首先定义一个DX操作类 using System; using SlimDX; using SlimDX.Direct3D9; using System.Windows.Interop; usin ...

  5. Python学习笔记一,输入输出

    输出:用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下>>>print('hello,world') 也可以是多 ...

  6. nginx+mysql+php

    根据生产环境安装操作系统(centos 6.0 64位系统),安装完成后,使用Xshell通过ssh协议连接服务器.ssh 用户名@IP+回车+输入密码后登录系统.#mkdir -p /home/to ...

  7. MVC Controller 与 View 传值

    Controller 到 View 1 强类型 控制器 // GET: /Test/ public ActionResult Index() { DateTime date = DateTime.No ...

  8. RenderPartial RenderAction Partial Action

    MVC Razor中有不同的展现partial view的方法,许多开发人员子在选择使用 RenderPartial or RenderAction or Partial or Action help ...

  9. 使用ARM模板部署自动扩展的Linux VMSS(1)

    在Azure之前的ASM版本或者经典模式中,用户使用Azure Website,Azure Cloud Service等PAAS服务,可以实现一定程度上的自动扩展(auto scaling),但有着诸 ...

  10. 移动端Web App自适应布局探索

    1.困扰多时的问题 在这之前做Web App开发的的时候,在自适应方面一般都是宽度通过百分比,高度以iPhone6跟iPhone5之间的一个平衡值写死,我们的设计稿都是iPhone5的640 * 11 ...