自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (2)
  • 收藏
  • 关注

原创 库存清理算法

前面已经把商品库存按处理方式主要分为以下几种normal sale,  return,  markdown, liquidation。现在明确一下,算法是以追求收益最大化为目标,也就是当前手里的这些商品,不考虑进价的情况下,如果能够在未来一定时间内折算成现金,这个现金要是 最大的。现在已知库房有某种商品N个,它是不是除了正常销售之外还有多的M个,这M个商品是不是都是健康的,如果其中有不健康的,

2016-03-28 12:11:25 1083

原创 冗余库存的清理方式

不健康的商品库存,一般有以下几种方式进行清理, 1 退货,return。2 降价,markdown。3 清算,liquidation。 Return:退给供货商。1)能不能退,当初合同里有没有写这一条款。2)退一个能从供货商那里拿回来多少钱。3)退一个我需要花多少钱在人力运输成本上。4)从我提出退货请求到出库房需要多长时间,期间我还是要承担holding的花

2016-03-28 12:10:55 2877

原创 不健康库存的鉴别

从上文可以看出,并不是除了当周要卖的,多余的都是不健康的。多出的那些库存里面其中有一部分是为了满足未来数周的正常销售而选择在当前保留的。所以overstock的库存分为两部分,一部分是健康的,另一部分是不健康的。当然,理想情况下,每周要卖多少,我就进多少货,做到零冗余,这样不会有任何多余的损耗。实际上,1 无法做到对实际销量的精准预测,通常会有个估计值,或者销量预测的结果是个概率分布。2

2016-03-28 12:10:31 995

原创 商品库存的基本概念

如果某种商品的库存量过多,overstock,那么可能存在问题。比如一定时期内卖不出去,会导致1 占用现金流。这个很重要,一件商品售价100块钱,在年初的时候卖出去和在年末卖出去的概念是大不一样的。理解成现金也是有个折旧率的。2 占用库房空间,浪费租金成本。3 消耗不必要的人力物力水电。4 间接影响其他商品的备货。所以控制商品库存不超过合理的数量非常重要,可以节省成本,降低运营

2016-03-28 12:09:59 1194

原创 不断积累 勇闯高峰

以下是平时的点滴记录:

2015-11-05 11:17:41 399

原创 Java知识点(更新)

1  IO 与NIO其实就是几个主要的类:Buffers :IO没有缓冲,是面向流的。NIO有缓冲,可以提供更加灵活的API。Channels :IO没有channel,一个线程管理一个连接,是阻塞式的,连接中当前没有数据,线程阻塞。NIO提供channel,可以让一个线程同时管理多个连接或者读取多个文件,是非阻塞的。Selector:通过selector来选择当前需要处理的cha

2015-03-25 18:28:17 430

原创 若干整数组成的最小值

一组正整数,每个都要用上,把它们首尾拼接,可以组成一个新的整数,问最小的整数怎么拼接。 12和23: 1223 < 2312思路可以是这样: 实际转化为字符串问题,每个整数可以表示成字符数组,将它们纵向排列成一个矩阵,空的位置填-1. 32, 546, 3251,274, 54, 541, 1234, 336, 58先排序第一行,再排序第二行,依次往下。每次分别按横轴上字符的asc码从小到大

2015-02-20 23:26:26 587

原创 矩阵杂项

n个长度为m的整数序列,从每个序列中任意取出一个数,将这m个数相加,得到一个和。问从所有这些和里面取出前k大。先考虑两个序列的情况,将这两个序列从大到小分别排序,然后做成矩阵,从左上到右下递减,则可以从左上角开始按斜线输出前k大,最后一层可能需要两两比较一下。更快一点的做法,输出是1,3,5,7.....等差数列,可以直接利用等差数列求和公式,快速定位到最后一层,再比较。多个序列,

2015-02-20 12:25:50 328

原创 两个海量文件找重复项

两个海量文件,每个文件都存储了100亿个URL,32位机器上计算两者重复的URL。想到另外一个问题,如何在一个海量URL文件中,使用32位机器找出重复次数最多的那个URL。这个问题一般有几个思路,1 遍历文件,对每个URL 哈希取模,结果存入多个小文件,再对每个小文件读入内存哈希计数得到次数最多的那一个,最后从不同文件中选出最大的那一个。2因为内存受限,考虑到URL具有很强的规则性,比如http(f

2015-02-20 11:56:13 1280

原创 非递归遍历二叉树

public static void postOrder(Node root){ //check Stack stack = new Stack(); Node p = root; while(p != null){ stack.push(p); if(p.left != null){

2015-02-19 00:46:14 364

原创 输出螺旋矩阵

从外向内按序号输出矩阵。1 先确定有几个嵌套矩形,即count值, 比如图中矩形只有一个,矩形的个数由短边确定。从外向内处理嵌套矩形。2 确定矩形顶点坐标公式。用k从外向内给矩形编号,从k=0开始编号。 k public static void run(int[][] a, int n, int m){ int min = n>m ? m : n; int c

2015-02-17 12:50:42 521

原创 字符串的相似度

用最少的步骤将源字符串变成目标字符串,可选的操作可以是 1 加一个 2 减一个 3 修改 操作次数,叫做这两个字符串的编辑距离,即相似度。动态规划: 设f(i, j) 为源字符串的前i个字符与目标字符串的前j个字符的子串距离,则 f(i, j) = min{ f(i, j-1) + 1, 加一个 f(i-1, j) + 1, 减一个 f(i-1, j-1) + g(i, j) 修改

2015-02-16 17:47:25 436

原创 输出满足2a=b的数对

给定一数组,输出满足2a=b(a,b代表数组中的数)的数对,要求时间复杂度尽量低。二分搜索是很显然的,不过这题主要考的还是看你仔不仔细。 1 有重复数据怎么办。 2 如果重复数据是0呢。 3 正数和负数混合怎么办。要求时间复杂度越低越好,那么尽量减少数据量,所以要去重复数据,如果重复数据是0,输出(0,0),正负数分开排序和遍历,两个线程处理。即使单线程,因为nlgn非线性,二分数据也有助于时

2015-02-16 16:15:50 729 1

原创 jvm内存

主要内存区域: 1 堆。 线程共享,new的对象实例,新代和老代。2 栈 线程私有,基本类型,方法调用时的栈帧(frame)。3 方法区 线程共享,class对象,static数据,常量,方法定义。也叫永久代。

2015-02-16 15:12:02 395

原创 石头合并得分

直线上n堆石头,个数不等,每次可以合并相邻的两堆石头,并把合并后的石头个数作为此次得分,问最大得分是多少?方法1: 递归,自顶向下,注意定义二维数组,空间换时间。public class Stone { //方法1 递归 private int[][] value; private int[][] sum; public Stone(int[] a){

2015-02-15 16:04:10 372

原创 栈和队列

public class Queue { private Element head; private Element tail; public int size; public void enqueue(Element e){ if(tail == null){ head = e; tail = e;

2015-02-14 16:15:40 363

原创 二叉树路径和

public static void route(Node node, int n, Stack stack){ if(node == null) return; stack.push(node); if(node.left==null && node.right==null){ if(stack.sum == n){ System

2015-02-13 13:47:34 337

原创 轮流取硬币

问题: 直线上一排硬币,币额不等,某人与对手轮流取硬币,一次取一枚,只能从头或者尾取,假设他开始取第一枚,看谁最后拿的钱最多。问 * 1)有没有办法保证他不败。 * 2)他最多可以拿多少钱。怎么才能不败?原理在于第一个取硬币的人可以控制对手的行为,给硬币从1开始顺序编号,分别计算单数硬币和双数硬币的总的价值,看哪一个大。但是这个值并不是最大值,要取到最多的钱,可以考虑动态规划。 假设位置

2015-02-13 12:02:41 1204

原创 系统设计

系统分析,业务建模,系统指标。系统设计,结合技术框架,映射业务模型。系统实现,代码实现。DDD直接由业务需求到领域模型,合并分析与设计。

2015-02-04 16:00:12 386

转载 二:Lucene的总体架构

Lucene总的来说是:一个高效的,可扩展的,全文检索库。全部用Java实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。在Lucene in action中,Lucene 的构架和过程如下图,说明Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜

2013-07-10 16:38:32 462

转载 一:全文检索的基本原理

一、总论根据http://lucene.apache.org/java/docs/index.html 定义:Lucene 是一个高效的,基于Java 的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据 和非结构化数据 。结构化数据: 指具

2013-07-10 16:18:53 520

原创 SQL查询语句

先开个帖子,慢慢补充,测试环境均为MYSQL。1 选出name列有重复的行select * from Table group by name having count(*) > 1; 2 选出score列的值排前3名的行这里有个陷阱就是,值排前三名,对应的行可能多于三行,要把它们都选出来。select * from Table a where (sele

2013-07-08 14:24:00 456

原创 一条线段分成三部分,构成三角形的概率

一条单位长的线段,在上面任取两个点,可以将线段分成三个子线段,问这三个子线段可以构成三角形的三条边的概率是多大?假设三条边的长度从左到右分别为 x, y, 1-x-y。两边之和大于第三边,即任意一条边不能大于等于0.5,即0两边之差小于第三边,(1-x-y)-x0.5。全集,单位线段上任取两点,需满足x>0,y>0,x+y所求集合,还需满足x+y>0.5,即红色三角形部分。

2013-07-08 13:53:05 11000

原创 学生站队问题

/** * 学生站队,要求站成两排,每一排都是从矮到高,并且后排的人比他前排的人高,问有多少种站法。 * 实际就是全排列问题,满足 * a[0]<a[2]<a[4]<a[6] * a[1]<a[3]<a[5]<a[7] * a[0]<a[1], a[2]<a[3], a[4]<a[5], a[6]<a[7] * * 再重复一遍字典序的步骤: * 1 数组从小到大排序。 * 2

2013-07-08 11:00:08 723

原创 visitor模式的应用

项目中遇到这样一个问题,sip协议的消息种类很多,在不同的场景下,收到底层送上来的message时,不得不进行大量instanceof的类型判断,效率低而且不易维护,考虑到sip消息种类相对固定,可以使用visitor设计模式。public abstract class Message { public abstract void accept(Handler h);

2013-07-05 12:25:32 474

原创 海量整数,求中位数

遍历一遍,统计总的数目为n,于是定义中位数为n/2 -1, 或者n/2。将数据读入m个小文件,分别排序,然后仿照归并排序,建立size为m的最小堆,记录堆中每个元素对应的有序文件编号,踢出堆顶元素,补进对应文件的下一个元素,调整堆,直到踢出第n/2 -1, 或者n/2。

2013-07-05 10:13:05 474

原创 10亿个QQ号码,找出重复次数最多的那一个

hash取模,将号码分散在多个小文件里存储,然后分别对文件内号码排序,统计出现次数最多的那一个,最后对所有最多值取最大的那一个,为所求。

2013-07-05 09:40:34 3687 1

原创 寻找第K大的数

1  快速排序,涉及全部数据排序,O(n*lgn)2  选择排序,只循环k次,局部排序,O(n*k)3  堆排序,构建size为k的最小堆,局部排序,O(n*lgk)4  仿效快排的二分思路,按个数二分,O(n)5  仿效快排的二分思路,按值域二分,O(n)6  海量数据如何做?依然可以使用最小堆的思路,不过要并行,比如分成1000个小文

2013-07-04 11:31:17 438

原创 寻找重复次数在一半以上的那个ID

/** * 一个字符串ID序列,其中有一个重复次数在一半以上,找出这个ID,时间复杂度 O(n) * */public class WaterKing { public static String getMost(String[] names){ int times = 0; int size = names.length; String current = null;

2013-07-04 10:52:27 436

原创 n! 最低位1的位置

/** * n! 最低位1的位置 * * 除以2,直到不能整除 * */public class Zero2 { public static int count(int n){ if(n < 0){ return -1; } int count = 0; while(n>0){ count += n/2; n = n/2; } retur

2013-07-04 10:49:44 572

原创 n! 多少个0

/** * n! 多少个0 * */public class Zero { public static int count(int n){ if(n < 1){ return -1; } int count = 0; for(int i=1; i<=n; i++){ int m = i; while(m%5 == 0){ count++;

2013-07-04 10:44:33 619

原创 最长的连续子串,其中0和1的个数相等

/** * * 数字串,全为0,1组合而成。求一个最长的连续子串,其中0和1的个数相等。 * 比如: 01100111 --> 011001 * 110000011 --> 1100 / 0011 * * 方法: * 定义一个数组a,a[0] = 0 * 然后遍历输入输入数字串,遇到0,减1,遇到1,加1。含义就是,到目前位置,净值出现了多少个0或者1. * 在数组a中选择两

2013-07-04 10:40:22 2540

原创 最长等差子序列

/** * 求随机数构成的数组中找到长度大于=3的最长的等差数列 * 输出等差数列由小到大: 如果没有符合条件的就输出[0,0] * 格式: * 输入[1,3,0,5,-1,6] * 输出[-1,1,3,5] * 要求时间复杂度,空间复杂度尽量小 * * * 动态规划 二次哈希 * * 时间复杂度为O(n*n) * * */public class

2013-07-04 10:33:08 975

原创 最长乘积子序列

/** * 实数序列, 求最大乘积子序列 * */public class MaxBy { public static double find(double[] a){ assert(true); double max = 1; double min = 1; double finalMax = a[0]; for(int i=0; i<a.length; i++

2013-07-04 10:28:02 558

原创 拆分正整数数组,使二者和最接近,且长度相等。

/** * 一个 正整数数组,长度为2n,将它分成两个数组,长度均为n,使得这两个数组的和最接近。 * * 思路: * 记原数组的元素和为sum,从2n个元素中挑出n个,使得其和最接近并且小于等于sum/2。 * * 动态规划 * 结果集必然以某一个数结尾,所以可以枚举每一个元素。 * 在每一次枚举过程中,以该元素k结尾,然后看是否可以在前k-1找到i-1个数,使得它们之和等于

2013-07-04 10:17:42 1200

原创 拆分正整数组,使二者和最接近,且长度无限制

/** * 一个 正整数数组,将它分成两个数组,长度均无限制,使得这两个数组的和最接近。 * * 动态规划 * * */public class ArrayDivide1 { public static int divide(int[] a){ int sum = 0; for(int i=0; i<a.length; i++){ sum += a[i];

2013-07-04 10:15:05 512

原创 java序列化之比较

通过对Serializable和Externalizable的简单比较,哪怕是极其简单的类,发现序列化结果的大小相差很大,可以从80压到50,大家可以试一下,原因应该是前者是完全序列化,包含了class信息。public class A implements Serializable{ public int id = 1; public String name = "aaa";

2013-07-04 10:04:04 429

原创 寻找唯一出现奇数次的数

当然,如果是不止一个的数出现奇数次,可以使用hash。public class ODDNumber { public static int getOnlyOneOdd(int[] a){ assert(a != null); assert(a.length > 0); int v = a[0]; for(int i=1; i<a.length; i++){ v ^=

2013-07-04 09:57:48 707

原创 并查集之朋友圈子

/** * n=5, m=3, relations={{1,2},{2,3},{4,5}},表示有五个人,3对好友关系,用relations表示, * 则123是一个朋友圈子,45是另一个朋友圈子,问最终有多少个朋友圈子。 * * */public class Friends { public int count(int n, int m, int[][] r){ asse

2013-07-04 09:53:57 485

原创 并查集之树状数组

public class UnionTree { private int[] parent; private int[] size;//记录树的大小 private int total; private int groups; public void init(int n){ assert(n>0); parent = new int[n]; for(int i=0

2013-07-04 09:53:01 566

lucene原理分析pdf

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

2013-07-11

算法导论pdf

《算法导论》原书名——《Introduction to Algorithms》,是一本十分经典的计算机算法书籍,与高德纳(Donald E.Knuth)的《计算机程序设计艺术》(《The Art Of Computer Programming》)相媲美。 《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

2013-06-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除