当前位置:首页 » 操作系统 » javascript算法

javascript算法

发布时间: 2023-09-17 03:39:00

❶ 求一个javaScript算法

首先对你关注用户体验的精神表示支持。

仅对于你的问题补充进行一下交流:
因为用户的录入方式还是比较花样繁多的,所以你的验证js也许还会面临一些挑战。
比如你既然想到了backspace键,那么对于delete键如何处理呢,如果当作非法键来处理的话,对于习惯小键盘录入数字的人来说还是不太舒服的。
或是用户选中文本框内一部分数字后按下backspace键,或是用户调用输入法,或是ctrl+v粘贴入文本......

当然我绝对不是在挑错找碴,只是提一些建议:
如果需要适应这些录入方式的话,必然要写很多的js代码,并且有一个问题:用户可以禁掉javascript。所以觉得对于验证而言,后台为主,js在前台为辅。我们的最终目的其实只有两种,对于正确录入值进行操作,对于错误值进行拦截。当然话说回来,如果你的需求确实是严苛的前台验证的话,那加油吧。

以上。

❷ 如何使用javascript进行RSA/ECB/PKCS1Padding算法加密

javascript rsa加密/java使用Cipher.getInstance("RSA/ECB/PKCS1Padding")解密
1)服务器端获得生成密钥对;
2)javascript使用公钥加密;
3)java获得密文使用私钥解密;

❸ 求javascript 字符串压缩算法

<HTML>
<HEAD>
<TITLE>Decision Helper</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">

<SCRIPT LANGUAGE="JavaScript">
<!--
function Compress(strNormalString)
{
alert("压缩前长度:" + strNormalString.length);
var strCompressedString = "";

var ht = new HashTable;
for(i = 0; i < 128; i++) {
var e = new HashTableElement;
e.key = i;
e.code = i;
ht.Insert(e);
}

var used = 128;
var intLeftOver = 0;
var intOutputCode = 0;
var pcode = 0;
var ccode = 0;
var k = 0;

for(var i=0; i<strNormalString.length; i++) {
ccode = strNormalString.charCodeAt(i);
k = (pcode << 8) | ccode;
if((intSearch = ht.Search(k)) != null) {
pcode = intSearch;
} else {
intLeftOver += 12;
intOutputCode <<= 12;
intOutputCode |= pcode;
pcode = ccode;
if(intLeftOver >= 16) {
strCompressedString += String.fromCharCode( intOutputCode >> ( intLeftOver - 16 ) );
intOutputCode &= (Math.pow(2,(intLeftOver - 16)) - 1);
intLeftOver -= 16;
}
if(used < 4096) {
used ++;
var e = new HashTableElement;
e.key = k;
e.code = used - 1;
ht.Insert(e);
}
}
}

if(pcode != 0) {
intLeftOver += 12;
intOutputCode <<= 12;
intOutputCode |= pcode;
}

if(intLeftOver >= 16) {
strCompressedString += String.fromCharCode( intOutputCode >> ( intLeftOver - 16 ) );
intOutputCode &= (Math.pow(2,(intLeftOver - 16)) - 1);
intLeftOver -= 16;
}

if( intLeftOver > 0) {
intOutputCode <<= (16 - intLeftOver);
strCompressedString += String.fromCharCode( intOutputCode );
}

alert("压缩后长度:" + strCompressedString.length);
return strCompressedString;
}

function Decompress(strCompressedString)
{
var strNormalString = "";
var ht = new Array;

for(i = 0; i < 128; i++)
{
ht[i] = String.fromCharCode(i);
}

var used = 128;
var intLeftOver = 0;
var intOutputCode = 0;
var ccode = 0;
var pcode = 0;
var key = 0;

for(var i=0; i<strCompressedString.length; i++) {
intLeftOver += 16;
intOutputCode <<= 16;
intOutputCode |= strCompressedString.charCodeAt(i);

❹ web前端javascript能实现什么算法或者计算

在Web开发中,JavaScript很重要,算法也很重要。下面整理了一下一些常见的算法在JavaScript下的实现,包括二分法、求字符串长度、数组去重、插入排序、选择排序、希尔排序、快速排序、冒泡法等等。仅仅是为了练手,不保证高效与美观,或许还有Bug,有时间再完善吧。

1.二分法:

function binary(items,value){

var startIndex=0,

stopIndex=items.length-1,

midlleIndex=(startIndex+stopIndex)>>>1;

while(items[middleIndex]!=value && startIndex

if(items[middleIndex]>value){

stopIndex=middleIndex-1;

}else{

startIndex=middleIndex+1;

}

middleIndex=(startIndex+stopIndex)>>>1;

}

return items[middleIndex]!=value ? false:true;

}

2.十六进制颜色值的随机生成:

function randomColor(){

var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],

strHex="#",

index;

for(var i=0;i < 6; i++){

index=Math.round(Math.random()*15);

strHex+=arrHex[index];

}

return strHex;

}

一个求字符串长度的方法:

function GetBytes(str){

var len=str.length,

bytes=len;

for(var i=0;i < len;i++){

if(str.CharCodeAt>255){

bytes++;

}

}

return bytes;

}

3.js实现数组去重:

Array.protype.delRepeat=function(){

var newArray=new Array();

var len=this.length;

for(var i=0;i < len;i++){

for(var j=i+1;j < len;j++)

{

if(this[i]==this[j])

{

++i;

}

}

newArray.push(this[i]);

}

return newArray;

}

4.插入排序。所谓的插入排序,就是将序列中的第一个元素看成一个有序的子序列,然后不段向后比较交换比较交换。

function insertSort(arr){

var key;

for(var j = 1; j < arr.length ; j++){

//排好序的

var i = j - 1;

key = arr[j];

while(i >= 0 && arr[i] > key){

arr[i + 1] = arr[i];

i --;

}

arr[i + 1] = key;

}

return arr;

}

5.选择排序。其实基本的思想就是从待排序的数组中选择最小或者最大的,放在起始位置,然后从剩下的数组中选择最小或者最大的排在这公司数的后面。

function selectionSort(data)

{

var i, j, min, temp , count=data.length;

for(i = 0; i < count - 1; i++) {

/* find the minimum */

min = i;

for (j = i+1; j < count; j++)

{

if (data[j] < data[min])

{ min = j;}

}

/* swap data[i] and data[min] */

temp = data[i];

data[i] = data[min];

data[min] = temp;

}

return data;

}

6.希尔排序,也称递减增量排序算法。其实说到底也是插入排序的变种。

function shellSort(array){

var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; //
reverse()在维基上看到这个最优的步长较小数组

var i = 0;

var stepArrLength = stepArr.length;

var len = array.length;

var len2 = parseInt(len/2);

for(;i < stepArrLength; i++){

if(stepArr[i] > len2){

continue;

}

stepSort(stepArr[i]);

}

// 排序一个步长

function stepSort(step){

//console.log(step) 使用的步长统计

var i = 0, j = 0, f, tem, key;

var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;

for(;i < step; i++){// 依次循环列

for(j=1;/*j < stepLen && */step * j + i < len;
j++){//依次循环每列的每行

tem = f = step * j + i;

key = array[f];

while((tem-=step) >= 0){// 依次向上查找

if(array[tem] > key){

array[tem+step] = array[tem];

}else{

break;

}

}

array[tem + step ] = key;

}

}

}

return array;

}

7.快速排序。其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一趟排序将待排序的纪录分割成两部分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序;不段的递归实施上面两个操作,从而实现纪录值的排序。

function quickSort(arr,l,r){

if(l < r){

var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;

while(true){

while(arr[++i] < mid);

while(arr[--j]>mid);

if(i>=j)break;

var temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

quickSort(arr,l,i-1);

quickSort(arr,j+1,r);

}

return arr;

}

8.冒泡法:

function bullSort(array){

var temp;

for(var i=0;i < array.length;i++)

{

for(var j=array.length-1;j > i;j--){

if(array[j] < array[j-1])

{

temp = array[j];

array[j]=array[j-1];

array[j-1]=temp;

}

}

}

return array;

}

❺ javascript 自动布局算法

将整个系统看做这样一个物理系统:质点和橡皮筋的系统;橡皮筋有个自然长度Length,当橡皮筋被拉长时产生弹力T;任意2个质点间存在反万有引力G(简单的说就是质量产生斥力,和物理系统相反)。当斥力和弹力平衡的时候,布局就结束了,算法简单描述如下:
设系统为G(V,E);
for (vi in V) {
vi.x = random ();
vi.y = random ();
}
while (未平衡) {
for (ei(vx, vy) in E) {
Fx += T(ei, vx, vy);
Ty += T(ei, vy, vx);
}
for (vi in V) {
for (vj in V) {
if (i == j) 跳过
Fi += G (vi, vj);
}
}
for (fi in F) {
vi.x = |fi| * cos(fi.angle);
vi.y = |fi| * sin(fi.angle);
}
}

其中弹力公式T(e, vi, vj)遵循胡克定律:F = Length(e) > Length ? K * (Length(e) - Length) : 0; K 为胡克常数,酌情取值
万有引力公式G(vi, vj)遵循牛顿万有引力定律,但方向相反:
F = -G * Mass(vi) * Mass(vj) / (Distance(vi, vj) * Distance(vi, vj)); G 为万有引力常数,酌情取值,Mass(v)为质点v的质量,可直接去定点的边数;Distance(vi, vj)为质点vi 和vj之间的距离,根据勾股定理可到。

系统平衡的标准:合弹力=合斥力,表现为v.x和v.y不再发生变化或震动

注意:当随机初始化后,可能产生2个质点重叠的现象,这时2质点间的斥力可用常数替代,方向随机。若质点无质量,可使用一个小常数替代,如.0005

热点内容
javascript设计模式源码 发布:2025-01-24 14:49:07 浏览:908
linqtosql查询 发布:2025-01-24 14:48:57 浏览:120
华为手机更换开机密码如何操作 发布:2025-01-24 14:43:15 浏览:699
快手等待上传 发布:2025-01-24 14:41:37 浏览:380
apache和php7 发布:2025-01-24 14:32:26 浏览:892
linuxio文件 发布:2025-01-24 13:40:21 浏览:438
在excel设密码如何取消 发布:2025-01-24 13:38:54 浏览:483
电脑装存储时不能开机 发布:2025-01-24 13:38:52 浏览:285
2000人同时在线的小程序需要什么服务器 发布:2025-01-24 13:37:17 浏览:853
怎么搭建linux服务器配置 发布:2025-01-24 13:37:16 浏览:113