Java线程池的简单实现

最近在写Java程序的时候,接触到一些多线程方面的东西,用到了Java中的线程池。JDK中对线程池的支持比较完善,在java.util.concurrent包中,用ThreadPoolExecuter类表示一个线程池,同时还有一个Executor类扮演着线程池工厂的角色。例如:

1
2
3
4
public static ExecutorService newFixedThreadPool(int nThreads)
public static ExecutorService newSingleThreadExecutor()
public static ExecutorService newCachedThreadPool()
...

有关递增子序列的几个问题

昨天在Leetcode上刷了几道关于递增子序列的题,在discussion里看到一些非常简洁高效的代码,故学习记录于此。

递增三元子序列

给定一个存放整数的vector,求其是否存在长度为3的递增三元子序列,时间复杂度的要求是$O(n)$,空间复杂度的要求是$O(1)$。
既然时间复杂度是$O(n)$,就要求一遍遍历要得到答案,一种可行解的方式就是,使用两个变量存储三元递增子序列的前两个。设两变量分别为c1、c2,初值设为INT_MAX,设每一次循环取的数是x,若x比c1小,则将c1更新为x,否则判断x是否比c2小,是则更新c2,否则递增三元子序列找到。

时钟的SDL2实现

今天花了一下午时间写了一下这个程序。一开始摸不着头脑,更是走了歪路,所以浪费了很多时间。最后竟是无意间在贴吧的帖子上看见一个函数,才解决了困扰我很久的图片旋转的问题。

基本实现思路是这样:有一个表盘图片和三个指针图片,表盘图片作为背景,指针图片起始点在表盘的中央。获取系统时间,计算指针角度,重绘。监听退出事件,程序退出。

汉诺塔非递归算法

最近的算法课,讲到了递归与分治策略,书上递归的例子是很经典的汉诺塔问题。问题大意是有三个塔座,分别为a,b,c,开始时塔座a上叠有n个圆盘,这些圆盘自上而下,由小到大地叠放在一起,各圆盘从小到大编号为1到n。要求将塔座a上的圆盘移动到塔座b上,并且在移动时每次只能移动一个圆盘,且每个塔座上的圆盘都必须保持自上而下、由小到大的排列顺序。

本文不涉及对非递归算法的数学性证明,若想理解非递归算法的道理,下面的就不用看啦。

统计数字问题

前言

这学期学校开设了算法课,我们的教材是王晓东编著的《计算机算法设计与分析(第四版)》,在第一章绪论的课后编程练习题里看到了这个题目,除了最朴素的解法,自己并没有想到复杂度更低的办法,上网看了很多博客文章,或多或少都有讲的不清楚的地方,在绞尽脑汁想明白了一些地方后,觉得有必要自己来写一篇文章,算是为后人铺铺路吧。

南京之行

为期将近一年的第一届全国高校云计算创新大赛终于在昨天落下了帷幕,算是我们小组前段时间工作的结束吧。期间也断断续续,举办方不断拖延,也是经历了好多。从刚开始组建我们cloud组,到大赛报名,到提交初赛题目,到进入决赛,到提交决赛题目,到现场答辩,期间也“顺手”做了些了苏州公交数据分析,也算是对hadoop等工具的使用训练。奖项也在意料之中,一等奖不曾考虑过,二等奖最有可能,今天颁奖典礼果真如此,还算不错,虽然答辩时不如其他组讲的生动,ppt也丑(我逃……

Text Analytic in R

文本分析是一件很有意思的事情。比如说通过分析一封邮件里的文本,来判断其是不是垃圾邮件等。还记得上学期翘了下午的马克思去听了一个在谷歌工作的学长关于大数据的讲座,当时他也有讲到Gmail来过滤垃圾邮件,采用的是逻辑回归的办法。当时我也不懂什么是逻辑回归,感觉很不可思议。学了这章之后,发现逻辑回归模型用于判断是否为垃圾邮件似乎不可行,因为当每个单词都成为一个单独的变量的时候,变量个数是非常多的,变量个数多带来的后果自然是逻辑回归模型的过拟合,不知谷歌到底怎么做的……

|