数据结构及算法
Yan456jie
这个作者很懒,什么都没留下…
展开
-
深入理解Aho-Corasick自动机算法
原文链接 https://blog.csdn.net/lemon_tree12138/article/details/49335051/0.前言 我总是对那些具有状态转移过程的算法,心怀敬意。 例如:递归、递推、动规、DAT 以及现在要说的 AC 自动机算法。 数学真是优美! —— 致那些牛逼到不行的数学家们1...转载 2018-06-25 10:32:57 · 649 阅读 · 0 评论 -
中文字符转数字(可能会很大)
package zhToNum;import java.util.HashMap;import java.util.Stack;/** * 中文字符转数字(可能会很大) * @author root * */public class ChineseToNum { static String []unit = {"","十","百","千","万","亿"}; static S原创 2016-04-10 17:31:02 · 1316 阅读 · 0 评论 -
由小到大输出这些数字排列
package test;import java.util.Arrays;/**douban 这 六个字母从左到右分别代表数字 1,2,3,4,5,6,六个字母可取任意个进行组合,如d=1, du = 13,obn = 246,nbud=6431,多位数不用考虑相同字母,如dd=11 无效,请尝试由小到大输出这些数字排列,输出格式类似如下:d = 1o = 2u = 3b =原创 2016-04-22 21:30:46 · 559 阅读 · 0 评论 -
最长公共子子串 java
package maxCommon;/** * 找到最长公共子序列 * @author root */public class MaxCommonUnSeries { public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "AGTA"; S原创 2016-03-25 16:33:22 · 826 阅读 · 0 评论 -
大数相乘 java
package bigMultiply;public class MyMultiply1 { /** * @param args */ public static void main(String[] args) { String str1 = "-23456789009877666555544444";原创 2016-03-26 13:56:25 · 397 阅读 · 0 评论 -
一百个灯泡排成一排,第一轮将所有灯泡打开;
package light;/** * 一百个灯泡排成一排,第一轮将所有灯泡打开; * 第二轮。。第三轮,隔两个,将熄灭的点亮,点亮的熄灭。 * 100轮以后哪些灯泡是亮的 * @author root */public class Light { public static void main(String[] args) { // TODO Auto-generated原创 2016-03-27 19:24:40 · 1423 阅读 · 0 评论 -
n个数连接得到最小或最大的多位整数(携程)
package numCombine;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;/** * n个数连接得到最小或最大的多位整数(携程) * @author root * */public class NumCombine { public static原创 2016-03-28 12:36:35 · 900 阅读 · 0 评论 -
java插入排序
package insertSort;/** * 插入排序 * @author root * */public class InsertSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] data = {2,4,5,0,3,1,7,6}; ins原创 2016-03-31 11:16:43 · 403 阅读 · 0 评论 -
从数组中找出所有组合为s的数
java版本package numCombine;/** * 从数组中找出所有组合为s的数 * @author root * */public class NumComberAll { public static void main(String[] args) { // TODO Auto-generated method stub int a[] = {2,3,3,2,原创 2016-03-31 16:33:08 · 3096 阅读 · 1 评论 -
锯桌腿
package desk;/** * 一张桌子有n个不等长的桌腿,当最常桌腿大于所有桌腿数一半的时候,桌子可以平衡 * 每锯掉一条腿需要wi的代价,请用最小代价使桌子保持平衡 * @author Administrator * */public class Desk { /** * @param args */ public static void main(Stri原创 2016-04-01 11:49:30 · 1144 阅读 · 0 评论 -
用最少次数找出第二大的数;
比如有16个数,找出第一大和第二大的数;方法一:先找第一大的15次,再找第二大的14次,15+14方法二:建立小根堆法,15~29次方法三:胜者树法,15+3=18次以下介绍胜者树第二次比较7 6 4 三个数原创 2016-08-08 11:41:53 · 2295 阅读 · 2 评论 -
求1000阶乘中最后0的个数
# -*- coding: utf-8 -*-"""Created on Tue Mar 22 18:10:46 2016求1000阶乘中最后0的个数@author: root"""def fun1(): N = 1000 ret = 0; for i in range(1,N+1,1): j=i; while j%5==0:原创 2016-03-24 16:02:39 · 449 阅读 · 0 评论 -
1 + 11 + 1111+ 11111+ ..... + 11111(2016个) 结果是几位数
# -*- coding: utf-8 -*-"""Created on Mon Mar 21 20:38:06 2016@author: yanjie"""'''1 + 11 + 1111+ 11111+ ..... + 11111(2016个)结果是几位数用什么数据结构有几个6写算法'''a = [];m = 0;six = 0;for i in range(1原创 2016-03-21 21:26:09 · 1842 阅读 · 0 评论 -
二叉树层次遍历
//层次遍历 public void levelTraverse(Node root){ if(root==null) return; Queue de = new LinkedList(); Node split = new Node(-999); de.add(split); de.add(root); while(de.size()>1){ Node n原创 2016-03-23 22:39:26 · 357 阅读 · 0 评论 -
权重随机算法Java实现
权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100;简单实现代码如下:?1234567891011121314转载 2015-06-10 19:07:23 · 1330 阅读 · 0 评论 -
找出所有从根节点到叶子节点路径和等于n的路径并输出
//找出所有从根节点到叶子节点路径和等于n的路径并输出Stack stack = new Stack();public void findPath(Node root ,int n){ if(root!=null){ stack.push(root); n = n-root.value; if(n==0 && root.left==null && root.right==null原创 2016-03-23 22:40:25 · 2313 阅读 · 0 评论 -
java实现逆波兰式
package com.yj.rpn;import java.util.*;import java.util.logging.StreamHandler;/** * Created by yanjie on 17/10/31. * 逆波兰式 * 使用到的符号 * # * +- * *\\/ * () 括号比较特殊 */public class RPN { p原创 2017-10-31 17:47:07 · 709 阅读 · 0 评论 -
一致性Hash算法(Consistent Hash)
原文地址1 分布式算法在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法.典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求转载 2016-10-21 16:59:19 · 480 阅读 · 0 评论 -
最短路径—Dijkstra算法和Floyd算法
注意:以下代码 只是描述思路,没有测试过!! Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算转载 2016-09-07 16:26:44 · 548 阅读 · 0 评论 -
二分法和牛顿迭代法求平方根(Python实现)
原文地址求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现。那么要求一个数的平方根,是怎么实现的呢?实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代法(Newton iteration)1:二分法求根号5a:折半: 5/2=2.5b:平方校验: 2.5*2.5=6转载 2016-08-26 22:16:28 · 6065 阅读 · 0 评论 -
背包问题(java)
package dp_bag;/** * 有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4, * 它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包, * 如何让背包里装入的物品具有最大的价值总和? * * 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] } *原创 2015-01-12 15:53:55 · 966 阅读 · 0 评论 -
深度优先和广度优先遍历迷宫
package didi;import java.util.Stack;/** * 迷宫问题{{1,1,0,1},{1,1,0,1},{0,1,1,1},{0,0,1,1}};{1,1,1,0,1},{1,0,1,0,1},{1,0,1,1,1},{1,1,0,1,1},{0,0,0,1,1}, * @author yanjie * */public clas原创 2016-09-18 17:42:10 · 2922 阅读 · 0 评论 -
循环队列满队条件
严蔚敏的数据结构书上63页倒数第二段定义了判定队列空间是空还是满的方法:少用一个元素空间,判定队列呈“满”状态的标志是“队列头指针在队列尾指针的下一位置上(指环状的下一位置)” 意思就是说,循环队列留了一个元素空间,即当maxsize=100的时候,实际能存的数据只有99个,留一个不存的目的就是用来区分队列空还是满。因为空的时候q.rear=q.front,而满的时候就变成了(q.rear+转载 2016-09-03 19:25:37 · 7449 阅读 · 0 评论 -
字符串匹配算法(暴力匹配和KMP)
package kmp;import java.util.ArrayList;import java.util.Arrays;/** * 字符串匹配算法KMP,在s中匹配p * @author root * */public class KMP { public static void main(String[] args) { // TODO Auto-generat原创 2016-04-10 15:23:17 · 1152 阅读 · 0 评论 -
编辑距离算法(java)
package editDistance;/** * 编辑距离(删除,添加,替换 得到相等字符串所需次数)算法 * s = "eeba", t="abac" * 使用一个二维数组记录所需编辑次数(s为纵向,t为横向), 1 2 3 4 2 2 3 4 3 2 3 4 3 3 2 3 第一列为当t取一个字符a的时候,s依次为e、ee、eeb、eeba所需的编辑距离 其余的原创 2016-09-02 20:20:28 · 4500 阅读 · 2 评论 -
堆排序 java
package heapSort;/** * 大根堆 * @author root * */public class HeapSort { static int[] data = {0,9,4,6,2,5}; static int[] data1 = {0,2,4,5,3,1,7,6}; public static void main(String[] args) {原创 2016-03-06 19:47:32 · 418 阅读 · 0 评论 -
Java快排
package quickSort;/** * 快速排序 * @author root * */public class QuickSort { static int[] data = {0,2,4,5,3,1,7,6}; public static void main(String[] args) { // TODO Auto-generated method stub原创 2016-03-28 12:30:09 · 523 阅读 · 0 评论 -
给一个字符串数组,判断其是否是首尾相连的
package permutation;import java.util.Arrays;public class StrOrgEnd { public static void main(String[] args) { // TODO Auto-generated method stub //String [] str = {"ad","dg","gj","jl"}; St原创 2016-04-21 09:44:50 · 7194 阅读 · 4 评论 -
去除字符找到最大回文
package huiwen;import java.util.Stack;/** * 找到回文,由于无状态转移 * @author Administrator * */public class RmHuiwen { public static void main(String[] args) { // TODO Auto-generated method stub St原创 2016-04-03 23:09:25 · 427 阅读 · 0 评论 -
KD-tree的原理以及构建与查询操作的python实现
原文地址http://blog.csdn.net/u010551621/article/details/44813299#comments前几天小组讨论会上展示了kd-tree(k-dimension tree),感觉这玩意儿还挺有用的,所以学习了一下它的原理,然后把其中的构建kd-tree以及对应的查询操作实现了一下,现在跟大家分享一下首先说一下什么是kd-tree把转载 2016-07-30 18:01:47 · 8283 阅读 · 6 评论 -
并查集
将多个集合合并成没有交集的集合:给定一个字符串的集合,格式如:{aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}。要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}。package unionFindSet;import java.util.H原创 2016-07-27 12:50:18 · 384 阅读 · 0 评论 -
剑指XX游戏(六) - 轻松搞定面试中的红黑树问题
连续两次面试都问到了红黑树,关键两次都没有答好,这次就完整地来学习整理一下。没有学习过红黑树的同学请参考:> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures教你透彻了解红黑树 1.stl中的set底层用的什么数据结构?2.红黑树的数据结构怎么定义的?3.红黑转载 2016-03-24 20:21:51 · 515 阅读 · 0 评论 -
一句话单词倒置
void LoopMove(char * l, char * r){ char temp; while(l<r) { temp = *l; *l = *r; *r = temp; ++l; --r; }}void ReverseStr(char * str){ char *l,*r; r = str; l = str; LoopMove(l, r+st原创 2016-04-06 15:54:12 · 507 阅读 · 0 评论 -
12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)
12个时可以找出那个是重还是轻,13个时只能找出是哪个球,轻重不知。 把球编为①②③④⑤⑥⑦⑧⑨⑩⑾⑿。(13个时编号为⒀) 第一次称:先把①②③④与⑤⑥⑦⑧放天平两边, 一如相等,说明特别球在剩下4个球中。 把①⑨与⑩⑾作第二次称量, ⒈如相等,说明⑿特别,把①与⑿作第三次称量即可判断是⑿是重还是轻 ⒉如①⑨<⑩⑾说明要么是⑩⑾中有一个重的,要么⑨是轻的。转载 2016-04-05 17:37:40 · 611 阅读 · 0 评论 -
找到最大回文
package palindrome;import java.util.Stack;/** * 找到最大回文 * @author root */public class FindMaxPalindrome { static String ss = "aaabcadasabcddcbaddbc"; public static void main(String[] args) {原创 2016-03-10 17:40:54 · 451 阅读 · 0 评论 -
链表反转 C++
ListNode* reverse1(ListNode* pHead){ if(pHead == NULL) return NULL; ListNode * p1 = NULL; ListNode * p2 = pHead; ListNode * p3 = pHead->next; while(p3!=NULL) { p2->next = p1;原创 2016-03-20 18:37:36 · 487 阅读 · 0 评论 -
找出最长无重复子串
package maxUnCommo;import java.util.HashSet;/** * 找出最长无重复子串 * @author root * */public class MaxUC { static String ss = "aaabcadas"; public static void main(String[] args) { // TODO Aut原创 2016-03-10 17:40:07 · 429 阅读 · 0 评论 -
归并排序 java
package MergeSort;/** * 归并排序 * @author root * */public class MergeSort { static int[] data = {0,2,4,5,3,1,7,6}; public static void main(String[] args) { // TODO Auto-generated method stu原创 2016-03-07 09:11:46 · 354 阅读 · 0 评论 -
凸包Graham Scan算法实现
凸包算法实现点集合中搜索凸包顶点的功能,可以处理共线情况,可以输出共线点也可以不输出而只输出凸包顶点。经典的Graham Scan算法,点排序使用极角排序方式,并对共线情况做特殊处理。一般算法是将共线的点去掉距离小的,保留最远的,这样处理会导致不能输出凸包边上的点,只能输出顶点。但是有时候需要输出这些边上的点,因此这里我将共线点都保留,并按照顺序排列。共线点排列方式是:非起始边按照从远道近排列,起转载 2016-03-30 15:20:57 · 870 阅读 · 0 评论 -
java 斐波那契数列
package feibo;public class Feibo { static int ss = 50; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(feibo1(ss)); } //递归法求解 public static do原创 2016-03-05 16:43:07 · 433 阅读 · 0 评论