用js可视化页面实现一些经典算法
1.用分治算法求解最大子段和问题。要求算法的时间复杂度不超过O(nlogn)。
最大子段和问题描述:给定由n个整数(可能为负整数)组成的序列a1, a2,…, an, 求该序列形如 的子段和的最大值。当所有整数均为负整数时定义其最大子段和为0。
例如, 当(a1,a2, a3, a4,a5,a6)= (-2,11,-4,13,-5,-2)时,最大子段和为 = 20,起始下标为2,终止下标为4。
2.给定含有n个元素的多重集合S,用分治法设计并实现在多重集合中找众数及其重数的算法,要求算法的时间复杂性在最坏情况下不超过O(nlogn)。
在多重集合中找众数及其重数问题描述:每个元素在S中出现的次数称为该元素的重数。多重集合S中重数最大的元素称为众数。
例如多重集合S={1,2,2,7,2,7,5},其中众数是2,其重数为3
1.采用动态规划策略设计并实现算法,求解最大子段和问题。要求算法的时间复杂性不超过O(n)。
- 采用动态规划策略设计并实现算法,求解最长公共子序列问题,要求时间复杂性不超过O(m*n)。
1.用贪心策略设计与实现一个贪心算法,求解背包问题。
背包问题描述:给定n种物品和一个背包,物品i的重量是w[i], 其价值是p[i], 背包的容量为C。设物品已按单位重量价值递减的次序排序。
每种物品不可以装入背包多次,但可以装入部分的物品i。背包问题是选择装入背包中的物品,在不超过背包容量的前提下使背包的得总价值最大。
- 假设活动已经按照结束时间递增的次序排序。用贪心策略设计与实现一个贪心算法,求解活动安排问题。
1.用回溯法求解n后问题。
n后问题描述:要求在一个n*n格的棋盘上放置n个皇后,使得她们彼此不受攻击。一个皇后可以攻击与之在同一行或同一斜线上的其他任何棋子。
因此,n后问题等价于:任何两个皇后不能在同行、同列、同一斜线上。由于要求不同的皇后不能放在同一行,不失一般性,可设皇后i只放在第i行。
2.用回溯法求解求解子集合和问题。
子集合问题描述:给定集合S,S中有n个正整数,M是一个正整数。子集合问题判定是否存在S的一个子集S1,使得S1中个元素之和等于M。例如:
若S = {7, 5, 1, 2, 10},M = 9,则存在一个S的子集合S1 = {7, 2},使得S1中个元素之和等于9。