用策略模式实现缓动动画
需求:让小球以各种缓动效果在页面中运动
动画开始前需要记录的:
小球所在原始位置
小球移动的目标位置
动画开始时的时间点
小球运动的时间点
之后,用setInterval创建一个定时器,定时器每19秒循环一次。
//缓动算法,此算法移植于flash
var tween = {
//t:动画已消耗的时间,b:小球原始位置,c:小球目标位置,d:动画持续时间
linear: function(t, b, c, d) {
return c*t/d + b;
},
reseIn: function(t, b, c, d) {
ret
继续阅读 »
视图动画(View Animation),又称补间动画(Tween Animation),即给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。本文首先讲解各种基本动画的使用,其实介绍View动画的工作过程。
概述
视图动画只能作用于View对象,是对View的变换,默认支持的类型有:
透明度变化(AlphaAnimation)
缩放(ScaleAnimation)
位移(TranslateAnimation)
旋转(RotateAnimation)
可以使用AnimationSet让多个动画集合在一起运行,使用插值器(Interpolator)设置动画的速度。
more
上面说到的几种动画,以及Ani
继续阅读 »
虽然已经一年多没有维护gbox这个图形库项目了,最近确实时间不够用。。。
今年的重点是把xmake彻底正好,至少在架构和大功能(包依赖管理)上,要完全落实下来,后期就是零散的维护和插件功能扩展了。。
tbox我会陆陆续续一直进行一些小规模更新,明年上半年稍微重构一些模块后,就开始重点重新搞gbox了,这才是我一直最想做,也是最喜欢做的项目了
所以我宁愿开发的慢点,也要把它做精,做到最好。。
好了,回归正题,虽然现在gbox还处于早期开发中,并不能用到实际的项目中去,但是里面的一些算法,还是很有参考学习价值的。。
我这两天没事就拿出来分享下,如果有感兴趣的同学,可以直接阅读源码:monotone.c
毕竟这个算法我陆陆续
继续阅读 »
这是唯品会实习生招聘的压轴题
首先吐槽下vip.com ,暑期实习生一共才招21人!太少了吧!
笔试现场各种乱,Java,Android,Tester,PHP,IOS甚至还有管培,产品经理这些,全坐一起,...人挨人的
笔试题更坑爹啊!前面选择题,都是Java语法题,感觉没多大含金量。
大题更坑啊!操作系统,网络,组成原理,算法各一题
其中前三者,都是考死知识,神马解释操作系统进程通信方式,解释段页式管理,解释TCP和UDP
最后的算法题还算不错!
题目是:O(1)时间内删除单链表节点
拿到这道题的第一想法是,我擦!你TMD逗我呢!这TMD也可能实现?!
寻思一番之后,突然发现,卧槽!这真的可以实现啊!
好吧,开始进入
继续阅读 »
下面用一句话来描述今年作为程序员的我:
我享受编程的乐趣,也想用自身所学,做个有一点受众的产品。
以前对算法和数据结构只有零零碎碎的印象,年初有幸看到《算法第 4 版》这本书,对算法和数据结构有了整体的认知。2、3月份那段时间每天一边细看,一边手写书上的代码加深理解,还顺便学习 java 。以我粗浅的眼光来看, java 的接口和泛型对团队合作来说是好东西。
继续阅读 »
算法:由输入经过一系列的计算步骤得到输出
排序问题:将无序的输入经过处理按照一定的孙徐输出
优秀的算法:
- 正确性(思路清晰)
- 高效(算法分析)
- 易于实现(现成的算法)
算法的用处:
- 生物信息学
- 网络(图论,字符串查找)
- 信息安全(RSA..)
- 优化(调度)
算法问题:
- 图论(最短路径...)
- LCS(动态规划...)
- 拓扑排序
- 凸包
数据结构:
C++ STL 优缺点 效率
难解问题:
并行算法
CPU效率
算法技术
算法的效率
渐近记号
问题规模量 时间T(n)
数组去重
继续阅读 »
排序的定义及分类
排序的目标:将无序输入的数据按有序排列
计算的时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n 3log n),且坏的性能是O(n2)。对于一个排序理想的性能是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要O(n log n)。
内存使用量(以及其他电脑资源的使用)
稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。
依据排序的方法:插入、交换、选择、合并等等。
more
分类
1.按稳定性(在待排序的
继续阅读 »
这是一道区间型DP,转移方程很简单,但在实现的过程中却遇见了很多坑,在此记录一下。 链接:Link 耗时:0.368s
容易想到,前i个数的划分情况可以由1,2,3...,i-1的划分情况来决定。因此很容易得到状态转移方程:
d[i] = min(d[i], d[j]+1) //j = 0, 1, 2...n-1 并且 s[j+1, i]为回文串,初始条件:d[i] = i。
d[i]表示前i项的最小划分。这样一来状态转移的复杂度就为O($n^2$)。
但状态转移的判断呢?“回文串”是一个复杂的条件,判断一个串是否为回文串需要将该串至少遍历一遍。这样一来时间复杂度就上升为O($n^3$)了。而事实上在这种算法中有许多无谓的计
继续阅读 »
这几个实验都是上课时候一两小时实现的,因为老师给出的参考代码有些惨不忍睹(虽然我写的也没好到哪去).因为时间有限,就没用C++.
同样是因为时间有限,仅供参考,有bug概不负责.
代码如下
# -- coding: utf-8 --
class Bank(object):
def init(self):
self.totalpro = 0
self.process = []
self.res_num = 4
self.res_type = ['A', 'B', 'C', 'D']
self.Resources = {'A':10,
继续阅读 »
在学习数论时我们都知道:只用2的幂次可以组合出所有的正整数。这便是二进制的魅力——状态简单而又变化万千。
引子
实际算法中,常常有一些线性的但数据量特别大的问题,如区间求和、求最小值等。很多时候,为了把时间复杂度从$O(n^2)$甚至更高的地方降下来,我们需要对数据进行一些预处理,以提高计算的速度。在这其中,有很大一部分是来自二进制运算特点的启发。
目录
树状数组
RMQ
LCA&树上倍增
继续阅读 »