分析:此题不难,但特别容易超时!——这正是困难之处:有n个元素的集合的子集共有2^n个,枚举算法的时间复杂度在O(2^n),且本题除枚举外别无他法(NP完全),因此必须尽一切可能性优化,着力在降低计算中n的值(以下1、2项优化)。关键的优化有以下几点(按重要性排列):
继续阅读 »
你的问题在于读书太少,想的太多 —— 杨绛
昨天惊闻杨绛先生去世,突然想到了几年前看到的杨绛先生的这句话。我觉得在计算机领域理论知识更是尤为重要,现在某乎上盛行的计算机理论知识(尤指算法)无用论当真特别可悲。在这里我觉得讨论科班非科班的人都是别有用心的,重要的问题在于这些基础的训练,而不是科班非科班,我们知道很多大神都不是计算机相关专业的,但是他们的基础的深厚程度,确是很多科班出身的人无法能及的,所以说一切的问题还是要积累知识。
这学期一直在学编译原理的课程,我实实在在的感觉到了这个课程和相关内容的有趣。尤其是我在学习之前试着自己不借助任何的理论去写一个解释器,竟然也命中了不少的知识,这让
继续阅读 »
隔离CPU核心
从一般内核 SMP 平衡和调度算法中删除指定的 cpu (由cpu_number定义)。 将进程移动到或移出“独立” CPU 的唯一方法是通过 CPU 亲和系统调用。 cpu 数量从0开始,因此最大值比系统上的 cpu 数量少1
此选项是隔离 cpu 的首选方法。 另一种方法是手动设置系统中所有任务的 CPU 掩码,这可能会导致问题和次优的负载均衡器性能
继续阅读 »
最近邻居
解题思路:
1. 使用JDK中的Point2D类,该类定义了坐标系空间中的一个点
2. Point2D是一个抽象类,但是在该类内部定义了静态的Double类,并且Double继承自Point2D
3. 可以通过Double的构造方法来实例化空间中的某个点
4. 将所有的输入数据全部实例化并存放在一个Point2D.Double的数组中
5. 对该数组进行暴力破解,计算其中任意两个点之间的距离,时间复杂度为$O(n^2)$,并保留下最小的两个点的编号,且编号小的在前
Java算法实现:
```java
import java.awt.geom.Point2D;
import java.util.Scanner;
/*
继续阅读 »
定义:定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换。
需求:绩效为S的人年终奖有4倍工资,绩效为A的人年终奖有3倍工资,绩效为B的人年终奖有2倍工资。
var calculateBonus = function(performanceLevel, salary) {
if (performanceLevel === 'S') {
return salary * 4;
}
if (performanceLevel === 'A') {
return salary * 3;
}
if (performanceLevel === 'B') {
继续阅读 »
Hash
哈希函数(散列函数)主要用于生成消息摘要(Message Digest),即将任意大小的数据映射到一个固定大小的数据。最常见的如MD5,SHA1等。
```
--------- hash function --------------
| input |---------------->| hash value |
```
在Node中,通过crypto.getHashes()可以查看所支持的哈希算法:
js
crypto.getHashes()
// => [ 'DSA', 'DSA-SHA', 'DSA-SHA1', ... ]
下面是一个MD5的例子:
```js
var hash = crypt
继续阅读 »
用redis造一个分布式rate limiter
号称分布式, 其实是装逼了呢。我也潮流用一发高逼格词 =。=
场景是: 我有一个服务, 需要对用户请求进行限速, 根据uid或者其他user信息, 服务进程是多节点的
经典的限速方式有很多种, token bucket(令牌桶), leaky bucket(漏桶), 它们的区别基本是对Burst(突发流量)的限制不一样,token bucket能允许一定突发流量, 具体算法查看wiki描述吧。
继续阅读 »
1. 优化目标
SVM 即支持向量机(Support Vector Machines),是一种大间距分类算法。
回顾在逻辑回归中,一个样本的损失函数为:
$$ Cost(h_\theta(x),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x)) $$
继续阅读 »
Flexbox 布局是 CSS3 中一种新的布局模型,被称为弹性盒模型。该模型是为了改进容器中内容的对齐、方向和排序方式,即使是动态,甚至是未知大小的容器。弹性盒模型的主要特点是,可以在不同屏幕尺寸下以最佳的方式,修改其子项的高度或宽度来填充容器的可用空间。
许多设计师和开发人员认为这种布局使用起来更加简单,弹性盒模型的使元素的定位更加简单,从而某些复杂的布局可以用更少的代码来实现,进而简化了开发过程。Flexbox 布局算法是基于方向的,这与基于垂直和水平的 block 和 inline 布局不同。弹性盒模型可用于小应用或组建的布局,然而对于大型应用应该使用 Grid 布局。
本文将用可视化的方式介绍 Flex 如何影响我们的
继续阅读 »
Javascript语言的设计不够严谨,很多地方一不小心就会出错。
举例来说,请考虑以下情况。
现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如下:
javascript
if (myObj不存在){
声明myObj;
}
你可能会觉得,写出这段代码很容易。但是实际上,它涉及的语法问题,远比我们想象的复杂。Juriy Zaytsev指出,判断一个Javascript对象是否存在,有超过50种写法。只有对Javascript语言的实现细节非常清楚,才可能分得清它们的区别。
more
第一种写法
根据直觉,你可能觉得可以这样写:
javascript
if (!myObj)
继续阅读 »