大巧不工


  • 首页

  • 归档

  • 标签

  • 分类

  • 搜索

java-collection

发表于 2018-02-27 | 分类于 技术

Java集合

重要的接口

  1. List(有序、可重复)
    List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

  2. Set(无序、不能重复)
    Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

  3. Map(键值对、键唯一、值不唯一)
    Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

阅读全文 »

floor-ceiling-round

发表于 2018-02-09 | 分类于 技术

趣味

floor和ceiling

为什么向下取整用floor(小于等于给定值n的最大整数),向上取整用ceiling(大于等于给定值n的最小值)。
想想在一个房间里,有地板floor(代表整数m),天花板ceiling(代表m+1),n位于地板和天花板之间,floor不就是小于等于n的最大整数么,ceiling也类似,真是形象~
round是指距离最近的整数,比如11.6距离12最近,11.4距离11最近,-11.6距离-12最近,-11.4距离-11最近,需要注意的是.5这个点,.5这个点永远属于数轴右边,比如11.5距离12最近,-11.5距离-11最近

round

round是指距离最近的整数,这就涉及到.5的情况怎么处理,不管正数还是负数,round后的.5都是返回数轴右边的整数

search-algorithm

发表于 2018-02-08 | 分类于 技术

符号表

符号表的主要目的是将一个键和一个值联系起来,可以根据键获得值。我们会用多种方式实现这种数据结构,不仅能高效的插入和查找,还可以进行其他方便的操作。这里我们还会讨论java中符号表的实现。为了熟悉kotlin这里所有的算法都将使用kotlin来实现。

规则

  1. 每个键对应一个值
  2. 键值均不允许null(java中hashmap是可以为空的)
  3. 删除操作,有延时删除(先置空再删除)和即时删除(直接删除)
  4. 迭代,便利所有键
  5. 键的等价性,equals判断是否相等,如果使用了comparable接口来进行比较,那么保证equals与compareTo返回值一致。
    总有人问hashmap是否有序,hashmap在使用时对键没有要求,不需要实现接口Iterable,也就是说键无法比较,那么怎么可能是有序的呢
阅读全文 »

颜色空间

发表于 2018-02-08 | 分类于 技术

RGB、YUV和HSV颜色空间模型
https://www.cnblogs.com/justkong/p/6570914.html

kiwiplayer的视频增强算法中,luma方法是将rgb颜色转换为yuv颜色空间来计算的。

采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

algorithm-question

发表于 2018-01-27 | 分类于 技术

主键都相同,选择排序和插入排序谁快

选择排序:比较N*(N-1)/2,交换0;
插入排序:比较N-1,交换0;
插入排序更快

逆序数组,插入排序与选择排序

选择排序:比较N(N-1)/2,交换N-1;
插入排序:比较N\
(N-1)/2,交换N*(N-1)/2;
插入排序更快

sort-algorithm

发表于 2018-01-23 | 分类于 技术

选择排序

一般用于小型数组

1
2
3
4
5
6
7
8
9
10
11
public static void selection(Comparable[] a){
for (int i = 0; i < a.length; i++){
int min = i;
for (int j = i + 1 ; j < a.length; j++){
if (a[min].compareTo(a[j]) > 0){
min = j;
}
}
exch(a,min,i);
}
}

阅读全文 »

算法分析

发表于 2018-01-21 | 分类于 技术

算法分析

一个程序开始运行到结束需要多少时间,需要使用多少内存,都需要进行算法分析,以求算法达到相对优的性能。算法的时间复杂度和空间复杂度合称为算法的复杂度。

时间复杂度

时间频度

一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

阅读全文 »

atom_tips

发表于 2018-01-10 | 分类于 博客

1 快捷键

  1. ctrl+tab切换标签页
  2. ctrl+w 关闭当前标签页,ctrl+k ctrl+w关闭所有标签页
  3. ctrl+shift+\ 切换到目录树,并定位到当前文件,在目录树中切换文件,按右箭头即可打开并回到工作区
  4. ctrl+k ctrl+left arrow 或者 ctrl+k ctrl+right arrow可以在目录树和工作区切换

算法

发表于 2018-01-08 | 分类于 技术

1 开平方

求常数a的开平方,其实就是对于函数$f(x) = x^2 -a$求解$f(x) = 0$的$x$。这个函数在$x>0$时单调递增,可以使用牛顿法逐步逼近。

如图所示,先取一个值$x_0$,假设$x_0$是解,判断$x_0$不是解之后,使用$x_0$点的倒数求$x_1$,以此方式逐渐逼近正解。示例代码如下:

1
2
3
4
5
6
7
8
9
static double sqrt(double s){
//当所求解与小于该值时,认为已求得正解
double err = 1E-15;
double t = s;
while(Math.abs(t - s/t) > err){
t = (t + s/t)/2;
}
return t;
}

阅读全文 »

java小贴士

发表于 2018-01-08 | 分类于 技术

1 值传递与引用传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int num = 10;
String str = "hello"
//第一个例子:基本类型
void foo(int value) {
value = 100;
}
foo(num); // num 没有被改变

//第二个例子:引用类型
void foo(String text) {
text = "windows";
}
foo(str);
// str 也没有被改变,这个过程其实是先分配一块内存并创建一个新的引用text,再将text指向了str的值hello,text = "windows"这个操作又将text指向了值为windows的对象,因此str没有改变。第三个第四个例子也可以这样理解。

//第三个例子:提供了改变自身方法的引用类型
StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) {
builder.append("4");
}
foo(sb); // sb 被改变了,变成了"iphone4"。

//第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。
StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) {
builder = new StringBuilder("ipad");
}
foo(sb); // sb 没有被改变,还是 "iphone"。
阅读全文 »
12345
99个小号

99个小号

41 日志
4 分类
14 标签
GitHub Weibo
© 2017-12 — 2019 99个小号