计算一组字符串的全排列[java]

问题

给出字符串”abc”计算其全排列
如abc,acb,bac,bca,cab,cba

思路

使用递归方法,每次确定一个未使用的字符,再递归寻找下一个未使用的字符,直到生成字符串长度与原来的长度相同,就返回,每次返回之后,要把这次的字符取消标记

伪代码

java完整代码

记一道坑很多的模拟题864C[Bus]

题目地址

http://codeforces.com/contest/864/problem/C

题目大意

总路程a,油箱容量b,加油站离出发点f,总共要跑k趟,问,至少需要加油多少次

分析

以每次到达加油站为基准点,判断是否可以跑完下一个端点–加油站的行程,如果可以,不加油,不可以,加油

有几种特殊情况
1.沿着当前方向,跑到端点结束,没有再从端点回加油站的过程
2.根本跑不到加油站
3.沿着当前方向,加一次油跑到下一个端点,结束

代码

开源数据库Postgresql安装/卸载总结

What Postgresql

一个开源数据库,类似mysql,由于mysql被收购了,这个数据库正被越来越多的使用

怎么安装?

安装非常简单,但是安装过后的初始化还是有点麻烦,具体可以看这篇文章

为什么要卸载?

安装好之后,如果你很倒霉的话,会遇到postgresql服务怎么都启动不了,输入psql指令显示没有服务的情况。
这时候,我们首先会使用apt-get remove postgresql删除软件,再重装,可不幸的是,这样是不行的!

怎么彻底删除?

遇到这种奇怪问题的不只一个人,所以我再stackoverflow找到了答案,下面就搬运过来,记录一下。
步骤如下

[cra[……]

Read more

Python中关于模块之间互相调用的总结

问题

在python里,假设我们有两个模块,A,B,在模块a中有文件a1,模块b中有文件b1.
结构如下
–a
—a1
–b
—b1
那么,在b1文件中调用a1里的方法,就会出现import error,告诉我们找不到这个模块

解决方法

对于这类问题解决方法很简单,由于他们的父级目录都是相同的,我们只需要在模块a中加入一个空的文件init.py(必须是这个名字,下划线前后都是两个),就可以将目录a转化为libroot。我们的调用这时候也就可以进行了。

更复杂的情况

上面的情况比较简单,但是往往我们使用的过程中会有更加复杂的情况,比如下面
–MyProject
—[……]

Read more

Android自定义View的实现方式总结

Android自定义view是什么

在我们的日常开发中,很多时候系统提供的view是无法满足我们的需求的,例如,我们想给一个edittext加上清除按钮,等等。
这时候我们就需要对系统的view进行扩展或者组合,这就是所谓的自定义view。

Android自定义view的种类

自定义view大概可以分为四个大类,主要是通过实现方式来区分
1.自绘控件,继承view,重写onDraw方法,在其中进行绘制,需要自己适配边距等等
2.继承ViewGroup派生的特殊Layout,主要用于实现自定义布局,也需要自己适配边距等
3.继承特定的View(如TextView等),不用自己适配支持wra[……]

Read more

Android性能优化——电池使用优化

为什么要做电量优化

Android应用开发中,需要考虑的情况是,如何优化电量使用,让我们的app不会因为电量消耗过高被用户排斥,或者被其他安全应用报告。

什么样的行为会导致电量损耗过高

对于移动设备而言,有以下几种行为会导致设备电量的消耗增加
1.屏幕保持开启状态
2.蜂窝网络的频繁启动与关闭

如何观测我们的应用电量使用情况

可以先使用以下adb命令,生成我们应用的电量使用情况txt

从电脑拔出手机,操作一会我们的目标app,再接上电脑

然后再去[……]

Read more

Android性能优化——内存优化

Android内存分配机制的问题

Java提供了完善的垃圾回收机制,让程序员不用关心回收内存问题,但是在实际使用中,还是会出现内存回收不完全的问题。这时候android系统看到了内存使用居高不下,就会不断的增加分配内存,最后导致整个应用卡顿或者死掉。

产生这类问题的原因

由于java拥有gc机制,按道理来说,这样的内存泄露是不会发生的,但是为什么还是会产生这样的现象呢?因为我们的引用被一个已经不可访问的对象持有,导致gc无法正确识别,所以产生了内存泄露。

如何避免

这里主要运用三个android sdk提供的工具来寻找和诊断

Memory moniter——实时监测应用内存的分配和[……]

Read more

Android性能优化——图像绘制与布局

Android的图像绘制

在Android中,呈现界面的重要方式就是图像,而绘制图像的工作更是非常重要,这个重要的工作是谁在处理呢?那就是我们的GPU。但是GPU的资源是有限的,当我们的绘制任务过多的时候,就会使系统的图像绘制变慢,用户的体验就会是应用很卡,或者感觉到丢帧。

图像绘制过度的原因

图像绘制过度的原因主要有几种

1.绘制的东西太多了
2.反复绘制的次数过多

图像绘制性能优化

1.针对绘制过多的问题,我们可以反复检查自己的界面,去掉一些或者合并一些不必要/重复的东西

2.针对绘制次数过多,我们可以借助安卓手机的开发者模式中的过度绘制选项,查看哪一部分的图形过度绘制,再去[……]

Read more

[W10]大数据学习

大数据学习

我的学习算法有时候会面对大数据的考验,我们需要做一些优化才能保证速度

随机梯度下降

传统的梯度下降法每次会遍历整个集合,效率较低,随机梯度下降不必每次都遍历,效率较高
首先引入几个公式

算法步骤

1.随机排序数据集合
2.遍历随机的数据,使用如下公式进行学习

迷你梯度下降法

迷你梯度下降是一个折中的办法,不像梯度下降每次使用全部,也不是只使用一个数据。
迷你梯度下降一次只使用少量数据,一般范围是2-100
公式如下

随机梯度下降的收敛

我们怎么判断什么样的下降率a是合适的?我们如何确定已经到达了全局最优解的点?

我们可以每隔1000[……]

Read more

[W9]异常检测

异常检测动机

当我们有新的数据样本的时候,我们希望通过一个模型p(x)以及一个门槛值ϵ来判定这个样本是否是异常的。

高斯分布

高斯分布是一种可以被描述为%e9%ab%98%e6%96%af%e5%88%86%e5%b8%83%e5%85%ac%e5%bc%8f的类钟型线。
具体公式是

%e9%ab%98%e6%96%af%e5%88%86%e5%b8%83%e6%a8%a1%e5%9e%8b
其中几个参数的计算如下
u%e8%ae%a1%e7%ae%97

%e7%ac%ac%e4%ba%8c%e5%8f%82%e6%95%b0%e8%ae%a1%e7%ae%97

普遍公式

只有公式部分不同,其余部分均与高斯分布相同

%e6%99%ae%e9%81%8d%e5%85%ac%e5%bc%8f

异常检测vs监督学习

何时使用异常检测
正样本较少,负样本多,正样本不够训练,且种类太多
何时使用监督学习
有大量的正负样本,我们有足够的正样本来训练,未来的正样本与现有的类似

推荐系统

推荐系统的目的是为了给用户推荐产品
这里有几个定义
nu 用户数量
nm 电影(产品)数量
r(i,[……]

Read more