Skip to content

Orekrigo/algorithm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

algorithm

用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)。

  1. 采用动态规划策略设计并实现算法,求解最长公共子序列问题,要求时间复杂性不超过O(m*n)。

三、贪心法

1.用贪心策略设计与实现一个贪心算法,求解背包问题。

背包问题描述:给定n种物品和一个背包,物品i的重量是w[i], 其价值是p[i], 背包的容量为C。设物品已按单位重量价值递减的次序排序。

每种物品不可以装入背包多次,但可以装入部分的物品i。背包问题是选择装入背包中的物品,在不超过背包容量的前提下使背包的得总价值最大。

  1. 假设活动已经按照结束时间递增的次序排序。用贪心策略设计与实现一个贪心算法,求解活动安排问题。

四、回溯法

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。

About

用js可视化页面实现一些经典算法

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages