05 2019 档案
摘要:算法思想:贪心算法 实际问题:活动安排问题 编写语言:Java ! More 问题描述 哈夫曼编码(Huffman Coding):又称霍夫曼编码,是由 Huffman 于1952年提出一种编码方法,是可变字长编码的一种。哈夫曼编码完全依据字符出现概率来构造异字头的平均长度
阅读全文
摘要:算法思想:贪心算法 实际问题:活动安排问题 编写语言:Java ! More 问题描述 给定n种物品和一个背包,物品i的重量是wi,其价值是vi,背包的容量为C,问应该如何选择装入背包的物品,使得装入背包中物品的总价值最大。物品可以不装入,可以全部装入,也可以部分装入。 &
阅读全文
摘要:算法思想:贪心算法 实际问题:活动安排问题 编写语言:Java ! More 问题描述 设有n个活动的集合 E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 i 都有一个要求使用该资源的起始时间 s
阅读全文
摘要:思想描述 分治法是一种算法思想,其设计思想为:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,这些子问题相互独立且与原问题相同。从而达到各个击破,分而治之的目的。在实际应用中,分治法往往会和递归算法结合在一起。 <! More 递归的概念:直接或者间接地调用自身的算法称为递归算法,用函数自
阅读全文
摘要:算法思想:分治法 实际问题:最大子段和 编写语言:Java <! More 问题描述 此篇博文是分治法解决最大子段和问题的实现。 问题描述:给定由n个整数(可能为负数)组成的序列A={a1, a2, ..., an},求该序列形如sum(A, i, j)的子段和的最大值。当所有整数均为负整数时,定义
阅读全文
摘要:算法思想:分治法 实际问题:循环赛日程表 编写语言:Java <! More 问题描述 假设有 n = 2^k 个运动员进行循环赛,要根据以下限制生成一个日程表: 1. 每个选手必须与其他 n 1 个选手各赛一次 2. 每个选手一天只能赛一次 3. 循环赛一共进行 n 1 天 生成内容:n行,n 1
阅读全文
摘要:算法思想:分治法 实际问题:线性时间选择 编写语言:Java <! More 问题描述 给定线性序集中 n 个元素和一个整数 k, 1 pivot) high ; if(low
阅读全文
摘要:算法思想:分治法 实际问题:棋盘覆盖 编写语言:Java <! More 问题描述 在一个 2^k×2^k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且
阅读全文
摘要:算法思想:分治法 实际问题:全排列问题 编写语言:Java <! More 问题描述 显示列表list(a, b, c, d......) 的全排列,显示的条目数为:n! 例如(1, 2, 3)的全排列为(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3,
阅读全文
摘要:算法思想:分治法 实际问题:快速排序 编写语言:Java <! More Java代码 Java //本篇博文代码主要有两种基准选择方式:基准=低下标处的值,基准=随机值 import java.util.Random; public class QuickSort { public static
阅读全文
摘要:算法思想:分治法 实际问题:归并排序 编写语言:Java <! More Java代码 Java //本篇博文代码是递归方式归并排序算法的实现 public class MergeSort { public static void main(String[] args) { int[] ary =
阅读全文
摘要:算法思想:分治法 实际问题:Strassen 矩阵乘法 编写语言:Java <! More 问题描述 我们知道,两个大小为 2 2 的矩阵相乘,一般需要进行 8 次乘法。而Strassen矩阵乘法可以减少一次乘法,只需要 7 次,看似很少,但当数据量很大时,效率就会有显著提升。不过使用 Strass
阅读全文
摘要:思想描述 动态规划问题是面试题中的热门话题,动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。 <! More 动态规划算法与 "分治法" 类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些
阅读全文
摘要:算法思想:动态规划 实际问题:最长公共子序列 编写语言:Java <! More 问题描述 子序列:是一个给定序列的子序列是在该序列中删去若干元素后得到的序列。如X={A, B, C, D}, {A, C}是X的子序列,{A, B, D}是X的子序列。 问题描述:给定两个序列X和Y,当另一序列Z既是
阅读全文
摘要:算法思想:动态规划 实际问题:最优二叉搜索树 编写语言:Java <! More 问题描述 二叉搜索树的定义: 满足以下任意两个条件的一个,就可称这棵树为二叉搜索树: 1. 它是一棵空树 2. 该树是一颗二叉树,非空,且满足下列两个条件: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
阅读全文
摘要:算法思想:动态规划 实际问题:最大子段和 编写语言:Java <! More 前言 最大子段和有多种解法,暴力破解法是最简单的,但时间复杂度较高,最少需要 O(n^2),未改进的算法为 O(n^3);而且暴力破解这种思路对学习算法是没有帮助的。因此个人并未实现。仅对分治法和动态规划两种思路进行了实现
阅读全文
摘要:算法思想:动态规划 实际问题:硬币问题 编写语言:Java <! More 问题描述 假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 n 元。问如何组合才能使硬币的数量最少? 关键特征 要推出问题的关键特征与递归关系,必要的例子是少不了的。 我们先假设一个函数 d(i) 来表示需要凑
阅读全文
摘要:算法思想:动态规划 实际问题:矩阵连乘 编写语言:Java <! More 问题描述 给定 n 个矩阵{A1, A2, A3, ..., An},其中Ai 与 Aj 是可乘的,j = i + 1, i = 1, 2, 3, ..., n 1。考察这 n 个矩阵的连乘积所需的最少乘法次数。 举例:数组
阅读全文
摘要:算法思想:动态规划 实际问题:多边形游戏 编写语言:Java <! More 前言 多边形游戏问题 是 矩阵连乘的最优计算次序问题 与 凸多边形最优三角剖分问题 的推广。我在解决 凸多边形最优三角剖分问题 时偶然间看到了这个结论,便跳过了该问题,直接解决其推广的问题,即多边形游戏问题。对于 凸多边形
阅读全文
摘要:算法思想:动态规划 实际问题:01背包问题 编写语言:Java <! More 问题描述 给定n种物品和一个背包,物品i的重量为wi,其价值是vi,背包的容量为c,问应如何向背包装入物品,使得背包中的物品价值最大。每个物品拿取或者不拿两种选择。不能选择装入某物品的一部分,也不能装入同一物品多次。 递
阅读全文