私は過去2日間の特定のマスターのgithubを見て、彼がアルゴリズムにもっと興味を持っていることを知っていました。数値を計算するためのステップアルゴリズムの1つを読んだ後、これは少し面白いと感じたので、自分で気づきました。
アルゴリズムの説明と実装の原則
整数番号を考えると、4番など、移動する方法がいくつのゴールに到達できるかを数えます。次の移動方法があります
コードコピーは次のとおりです。
[1、3]
[4]
[1、1、2]
[ 22 ]
[1、1、1、1]
実際、上記の組み合わせを通じて、次の結論を導き出すことができます。
1.最初のリストすべてのアイテムは1の組み合わせです
2。左から右への1の組み合わせ
3.アイテム内の1のインデックスを再帰的に見つけてから、左から2つのアイテムの値を計算し、この操作を再帰的に計算します
4。1と2の状況を除外します
ここに3つのツール関数があります。
コードコピーは次のとおりです。
//配列内の値を計算します
関数計算(arg){
return eval(arg.join( '+'));
}
//配列の値を出力します
function print(arg){
for(var i = 0; i <arg.length; i ++){
console.log(arg [i]);
}
}
//それが正しい方法であるか間違っているかを確認する
function hasrepeat(src、dist){
if(dist.length!= 2)falseを返します。
for(var i = 0、len = src.length; i <len; i ++){
if(dist.length == src [i] .length){
if(dist [0] == src [i] [1]){
trueを返します。
}
}
}
falseを返します。
}
以下は、アルゴリズムの実装です。
コードコピーは次のとおりです。
関数countSteps(n){
var counts = 0、i、j = 0;
var result = [];
var newresult = [];
var source = [];
var temparg = [];
// 1のすべてのアイテムを持つ配列を生成します
for(i = 1; i <= n; i ++){
source.push(1);
}
if(n> 2){
for(j = 1; j <n -1; j ++){
temparg.length = 0;
if(j <n -1){
//左から右に1インチのアレイを生成します
// 1 .. 11 .. 111 ..
array.prototype.push.apply(temparg、source.slice(0、j));
temparg.push(calculate(source.slice(j、n)));
result.push(temparg.slice(0));
//アイテムに1がないまで再帰配列内の内容
combine(temparg.slice(0));
}
}
}
// 1を含む配列アイテムを結合します
// 111-> 21-> 3
関数combine(arg){
var linearg = [];
for(var i = 0; i <arg.length; i ++){
if(arg [i] == 1){
if(i == 0 || i == 1){
linearg.push(calculate(arg.slice(0,2)));
array.prototype.push.apply(linearg、arg.slice(2、arg.length));
if(!hasrepeat(result、linearg)){
result.push(linearg);
combine(linearg.slice(0));
}
戻る;
}
}
}
}
// 2の場合、1つ以上があります
if(n == 2){
result.push([2]);
}
//すべて1を追加します
result.push(source);
//すべてのステップを出力します
印刷(結果);
console.log( 'and' and ' + result.length +' s Way of Walking ');
}
// 走る
countSteps(4);
//次のコンテンツを出力します
/*
[1、3]
[4]
[1、1、2]
[ 22 ]
[1、1、1、1]
合計で5種類のウォーキングがあります
*/
要約します
このアルゴリズムは、実際に特定のタイプのゲームに適用できます。 2つのオブジェクト間の距離が確実な場合、すべての可能な処理を実行でき、もちろん他の場所にも適用できます。ほとんどのフロントエンドエンジニアはアルゴリズムの実践が少ないが、それでも価値がある。多くのUIの詳細は実際にアルゴリズムを使用しています。時間があるときにアルゴリズムに関する記事をもっと投稿します。誰もが私にいくつかの貴重な提案をすることを歓迎します。