javascript 算法
前段时间学习算法方面的知识看了一下用C语言写的一些简单的算法自己用js模拟实现一遍现在整理出来和大家分享一下。
河内之塔(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(" ");
}
}else{
document.write(" ");
}//排版设定结束
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 算法的更多相关文章
- 【原】小搞一下 javascript算法
前言:在前端大全中看到这句话,以此共勉.基础决定你可能达到的高度, 而业务决定了你的最低瓶颈 其实javascript算法在平时的编码中用处不大,不过不妨碍我们学习它,学习一下这些算法的思想,锻炼一下 ...
- JavaScript算法题之–随机数的生成
JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2 ...
- javascript算法汇总(持续更新中)
1. 线性查找 <!doctype html> <html lang="en"> <head> <meta charset="U ...
- JavaScript算法与数据结构知识点记录
JavaScript算法与数据结构知识点记录 zhanweifu
- JavaScript 算法与数据结构(转载)
JavaScript 算法与数据结构 https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md
- JavaScript算法(归并排序与快速排序)
归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- javascript算法挑战
1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) ...
- JavaScript算法 ,Python算法,Go算法,java算法,系列之【归并排序】篇
常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的 ...
- FCC上的javascript算法题之中级篇
FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...
随机推荐
- PHP学习笔记三十七【http】
<?php print_r($_SERVER); //$_SERVER预编译变量[数组]输出请求报文,注意大小写 echo "<br/>"; foreach($_ ...
- iOS 之URL schemes
添加 URL schemes 步骤: 1.打开info.plist文件. 2.点击 “+ ”号添加,或者在列表上点击鼠标右键,选择 Add Row. 3.选择 URL types. 4.点击三角号展 ...
- css:hover选择器
:hover 选择器用于选择鼠标指针浮动上面的元素. :hover选择器可以用于所有的元素,不单是链接. 提示::link选择器设置指向未被访问页面的链接的样式,:visited选择器用于设置指向已被 ...
- 关于C语言中的强符号、弱符号、强引用和弱引用的一些陋见,欢迎指正
首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...
- linux下mysql连接jar包的位置在哪里?
linux下连接mysql数据库,肯定也会用到驱动jar包. 该jar包应该被置于jdk安装路径下jre文件夹lib目录的ext文件夹下.例如我的JDK安装路径为/usr/java/jdk1.6.0_ ...
- Effective Java实作类别 - 就是爱Java
定义好了Interface之后,现在我们开始来实作类别:Role,建立一个class,implements Role,将3个属性及clone()实作出来,单纯的getter与setter,可以利用ID ...
- 百度定位SDK:弥补Android基站WIFI定位缺失
http://tech.qq.com/a/20120524/000347.htm 如今,基于位置信息的移动应用越来越多,从餐饮.购物等本地生活服务,到定向广告的匹配.移动社交网络的构建,LBS类应用的 ...
- mybatis写demo时遇到的问题
写demo的时候,用mybatis的配置文件链接数据库,始终链接不上,太急人了.仔细查阅,发现在mysql中新增的表没有事务支持.还有就是mysql搜索引擎支持的不对.我换了一下 innodb的引擎, ...
- Triangle 解答
Question Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ...
- Linux进程通信----匿名管道
Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组表示的文件描述字.这个数组有两个文件描 述字,第一个是用于读数据的文件描述符第二个是用于写数 ...