`
beck5859509
  • 浏览: 110364 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

讨论算法实现五个数组成的不同序列。除了递归是否还有其它解法

 
阅读更多
同事今天出了一道题,已知一个序列[1,2,3,4,5],求由五个数组成的随机序列。结果比如12345,54321,32145这样的序列。
一个组合排列A(5,5)的问题,以下是我JS版本的实现。
如有其它算法,欢迎讨论。

var initData = [1,2,3,4,5];
var result = new Array();

	function build(array, value){

		if(array.length == 1){
			value += array[0];
			result.push(value);
			return;
		}

		//检测每次取得随机数是否和之前有冲突
		var conflictArr = new Array();

		for(var i=0; i<array.length; i++){
			var elems, rand;
			do{
				var index = getRandom(array);
				elems = array.slice(0);
				rand = array[index];
				//删除随机数
				elems.splice(index,1);
			}while(checkconflict(conflictArr, rand))

			var buffer = (value || '') + rand;
			build(elems, buffer);		
		}
	}

	//检测冲突
	function checkconflict(array, value){
		for(var i=0; i<array.length;i++){
			if(array[i] == value)
				return true;
		}
		array.push(value);
		return false;
	}

	function getRandom(array){
		var index = Math.floor(Math.random() * array.length + 1) -1;
		return index;
	}

	build(initData);
	document.getElementById('show').innerText = result.join('\n');
1
0
分享到:
评论

相关推荐

    Hanoi塔问题的一种非递归算法

    相较于传统的递归解法,非递归算法避免了深度递归导致的资源消耗,同时保持了算法的直观性和易理解性。这一成果不仅对Hanoi塔问题本身具有重要意义,也为解决其他类似问题提供了一种创新的思路和方法。未来,随着...

    求两个等长升序序列的中位数算法实现源码

    本篇文章将详细探讨如何实现求解两个等长升序序列中位数的算法,并提供源码实现。 首先,我们需要理解算法的基本思想。由于两个序列都是升序排列的,我们可以同时从两个序列的首元素开始比较,较小的元素进入结果...

    汉诺塔非递归算法实验报告

    非递归算法的关键在于找到一个可重复执行的步骤序列,而不是像递归那样通过自我调用来实现。 实验的目的在于运用非递归策略解决汉诺塔问题,这有助于理解问题的结构并寻找其他可能的解决方案。汉诺塔游戏的基本规则...

    c语言汉诺塔算法,递归,非递归

    对于汉诺塔问题,非递归解法的关键在于规划合法的移动序列。例如,对于n个圆盘,我们可以先将n-1个圆盘从A移动到C,然后将第n个圆盘从A移动到B,再将n-1个圆盘从C移动到B,最后将第n个圆盘从B移动到C。这个过程可以...

    Hanoi塔问题非递归算法的形式推导

    ### Hanoi塔问题非递归算法的形式推导 #### 一、引言 Hanoi塔问题,也称为汉诺塔问题,是一个...这种非递归算法不仅适用于Hanoi塔问题,其思想还可以应用于其他类似的递归问题,为优化递归算法提供了一个新的视角。

    算法作业_算法_回文序列_

    回文序列是一个在计算机科学和算法领域常见的问题,它涉及到字符串处理和递归思维。回文序列是指一个字符串,无论从左向右读还是从右向左读,都是完全相同的。例如,“madam”、“level”和“12321”都是回文序列。 ...

    河内塔问题的非递归解法

    转换河内塔问题的递归解法为非递归解法,可以帮助我们深入理解问题的本质,并且提供了一种解决复杂问题的新视角。这种技巧对于处理其他递归问题,如树的遍历、图的搜索等问题,也有一定的启发作用。 在提供的压缩包...

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法.doc

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法 本文档总结了解决最长公共子序列(LCS)问题的三种解法,针对连续子序列的情况。LCS 问题有两种定义子序列的方式:一是子序列不要求连续,二是子...

    c实现的经典算法大全

    递归解法的关键在于将n个盘子的移动分解为移动n-1个盘子到辅助柱,然后将最大的盘子移动到目标柱子,最后将n-1个盘子从辅助柱移动到目标柱子。递归的基本情况是当只有一个盘子时,直接将其从起始柱子移动到目标柱子...

    八数码问题非递归实现

    在提供的压缩包文件"tao"中,很可能包含了一个实现八数码问题非递归解法的程序。这个程序可能会用到Python等编程语言,利用其内置的数据结构和控制流功能来实现上述算法。运行该程序,用户可以看到游戏界面,可以...

    RLS递归最小二乘方自适应算法源程序-rls算法.rar

    RLS算法的核心思想是对最小二乘问题进行递归解法,通过不断更新权重向量来逼近目标函数的最优解。与传统的LMS(Least Mean Squares)算法相比,RLS具有更快的收敛速度和更高的精度,但计算复杂度也相对较高。 在...

    C语言魔板问题递归解法

    **C语言魔板问题递归解法** 魔板问题源于著名的魔方设计师厄尔诺·鲁比克的另一创新——二维魔方,也被称为魔板。这个玩具由一张8个小格子组成的棋盘构成,每个格子上标有不同的数字,分别为1到8。玩家的目标是通过...

    MIT算法导论公开课之课程笔记 2.渐进符号、递归及解法.rar

    《MIT算法导论公开课之课程笔记 2.渐进符号、递归及解法》 在计算机科学领域,算法是解决问题的关键。MIT的这门算法导论公开课深入浅出地探讨了算法的设计与分析,本笔记主要聚焦于渐进符号、递归以及问题的解决...

    递归实现的应用

    标题和描述所提到的"递归实现的应用"主要集中在使用递归来生成斐波那契数列,这是一个经典的递归实例。 斐波那契数列是这样一个序列:0、1、1、2、3、5、8、13、21、34...在这个序列中,每个数字是前两个数字的和。...

    求一个整数序列的最长递增子序列.doc

    最长递增子序列(Longest Increasing Subsequence,简称LIS)是计算机科学中的一个重要问题,特别是在算法设计和分析中。它要求找到一个给定序列中的一个子序列,使得这个子序列是递增的,并且长度最长。 在给定的...

    非递归的马踏棋盘程序MFC

    这个程序的实现通常涉及到递归或非递归算法。本篇将详细解析一个采用非递归方法实现的马踏棋盘程序,该程序基于MFC(Microsoft Foundation Classes)框架。 MFC是微软提供的C++类库,它为Windows应用程序开发提供了...

    梵塔难题(汉诺塔问题)四种方法代码(递归、线性算法、启发式、盲目式).rar

    在这个问题中,递归、线性算法、启发式和盲目式是四种不同的解法策略。让我们逐一解析这些方法: 1. **递归方法**: 递归是解决汉诺塔问题最直观的方法。基本思路是将最大的盘子先移动到目标柱子,然后将剩余的...

    求出最长上升子序列中各个元素

    在算法领域,最长上升子序列(Longest Increasing Subsequence,LIS)问题是一个经典的问题,它在计算机科学中有着广泛的应用,例如在数据结构、排序算法以及动态规划等方面。本篇将详细介绍如何找出一个序列中长度...

    全排列算法(分治法求解法和回溯法)

    全排列算法是计算机科学中一个基础且重要的问题,主要涉及到数组或序列的所有可能排列组合的生成。本主题将深入探讨两种解决全排列问题的方法:分治法和回溯法。 一、分治法求解全排列 分治法是一种解决复杂问题的...

    算法期末试卷

    * 算法的五个特性:有限性、确定性、能行性、有 0 个或多个输入且有 1 个或多个输出。 二、算法性能分析 * 算法执行时间的影响因素:算法设计的策略、问题的规模、编译程序产生的机器代码质量、计算机执行指令的...

Global site tag (gtag.js) - Google Analytics