![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
私念Moposion
这个作者很懒,什么都没留下…
展开
-
优先队列(二叉堆,堆排序)
2.4 优先队列(二叉堆)简介:可以删除最大元素和插入元素特点:高效(对数级别的)删除最大元素和插入元素操作public class PriorityHeap {//小顶堆//Instance Variablesint[] arr;int size;//Constructors//堆的大小默认为64public PriorityHeap() { this(64);}pub...原创 2019-02-03 13:34:04 · 153 阅读 · 0 评论 -
树的dp(方法一)
public class _10 {static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); // 初始思路:用dijkstra+最大子序的思路,将每一个子树的权值总和看成一个整体。// 改进思路:用dfs+递归,// 定义:d...原创 2019-03-13 18:14:40 · 124 阅读 · 0 评论 -
树的dp(方法二)
生命之树在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。这个最大...原创 2019-03-17 10:58:40 · 115 阅读 · 0 评论 -
Anniversary Party
Anniversary PartyThere is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor...原创 2019-03-17 11:02:33 · 176 阅读 · 0 评论 -
有序数组的二分查找
有序数组的二分查找public class BinarySearch {public static int serch(String[] s,String target) { int lo=0; int hi=s.length-1; while(lo<=hi) { int mid=(lo+hi)/2; int cmp=s[mid].compareTo(target); ...原创 2019-02-03 16:21:43 · 209 阅读 · 0 评论 -
二叉查找树
二叉查找树定义;一棵二叉查找树(BST)是一棵二叉树,每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键public class BST {private Node root; //二叉树的根节点static class Node{ private String key; //键 private String val; //值 private Node left...原创 2019-02-16 14:58:24 · 93 阅读 · 0 评论 -
选择排序
选择排序方法:1、找到最小的元素和第一个元素交换位置2、在剩下的元素中找到最小的元素与第二个元素交换位置3、如此往复,直到整个数组有序特点:1、运行时间和输入无关2、数据移动是最少的public static void sort(int[] arr) { for(int i=0;i<arr.length;i++) { int k=i; //找到剩余元素中最小元素的下...原创 2019-01-29 15:16:16 · 78 阅读 · 0 评论 -
插入排序
插入排序方法:将某元素插入到已经有序的数组中特点:所需时间取决于输入元素的初始顺序public static void sort(int[] arr) { for(int i=1;i<arr.length;i++) { for(int j=i;j>=1;j--) { if(arr[j]<=arr[j-1]) { int tmp=arr[j]; a...原创 2019-01-29 15:19:35 · 63 阅读 · 0 评论 -
交换排序(冒泡排序)
交换排序(冒泡排序)方法:比较相邻的元素并交换,直到数组有序为止特点:性能和插入排序相似public static void sort(int[] arr) { for(int i=0;i<arr.length;i++) { for(int j=0;j<arr.length-i-1;j++) { if(arr[j+1]<=arr[j]) { int tm...原创 2019-01-29 15:20:13 · 105 阅读 · 0 评论 -
归并排序
2.2 归并排序简介:将两个有序数列合并成一个有序数列,包括“自顶向下”和“自底向上”2种方式。特点:最坏情况下比较次数是NlgN(是一种渐进最优的基于比较排序的算法),但在实际应用中还要考虑其他算法的优越性。public class MergeSort {public static void merge(int[] a,int start,int mid,int end) { int[...原创 2019-02-01 13:36:48 · 219 阅读 · 0 评论 -
快速排序
2.3 快速排序简介:应用最广泛的排序算法,实现简单、使用于各种不同的输入数据在一般应用中比其他算法要快特点:原地排序(只需要一个很小的辅助栈),时间复杂度NlgNpublic class QuickSort {/** * a--待排序的数组 * l--数组的左边界 * r--数组的右边界 */public static void quick_sort(int[] a, i...原创 2019-02-01 14:41:52 · 96 阅读 · 0 评论 -
压缩算法(例1)
压缩变换小明最近在研究压缩算法。他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值很小是一个挑战。最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个变换来减小数字的值。变换的过程如下:从左到右枚举序列,每枚举到一个数字,如果这个数字没有出现过,刚将数字变换成它的相...原创 2019-03-18 12:38:02 · 299 阅读 · 0 评论