PUBLISHED ON February 12, 2015
List是Mathematica中的一种重要的数据结构。
** 在Mathematica中使用List时必须注意:Mathematica的List的索引是从1开始的,不是0! **
List的表示
List用{}来表示。如:
List的生成
Mathematica中,有以下三种方式来生成List。
- Range 命令
Range[Subscript[i, max]]
生成列表 {1,2,\[Ellipsis],Subscript[i, max]}.
Range[Subscript[i, min],Subscript[i, max]]
生成列表 {Subscript[i, min],\[Ellipsis],Subscript[i, max]}.
Range[Subscript[i, min],Subscript[i, max],di]
使用步长 di 生成列表.
PUBLISHED ON February 11, 2015
静态类型
Haskell是静态类型(Static Type)语言,在编译时期每个表达式的类型都已经确定下来。如果在代码中有类型错误,就不可能通过编译。这极大地提高了代码的安全性。在Haskell中,所有东西都有类型。
GHCi中查看数据类型
在GHCi中,通过 :t <name> 或者 :type <name>来查看变量、常量或表达式的数据类型。例如:
Prelude> let a = 1
Prelude> :t a
a :: Num a => a
Prelude> :type True
True :: Bool
Prelude> :t 4 == 5
4 == 5 :: Bool
基本数据类型
Haskell有以下几种基本数据类型:
PUBLISHED ON February 11, 2015
背包问题是动态规划思想和方法的经典应用问题,本文将从0-1背包,完全背包和混合背包三个角度来分析简单背包问题的求解方法。
背包问题
背包问题本质上是规划型问题,问题的核心在于在满足约束条件下,找到一种选择方案,使得目标值达到最优。通过动态规划的方法,可以将此类问题限制在多项式复杂度的时间内求解。
PUBLISHED ON February 10, 2015
什么是 JNI ?
JNI(Java Native Interface),Java 本地接口,是一个本机编程接口,提供了Java与C,C++语言的通信。JNI的主要实现方式为在Java中通过System.loadLibrary来加载C/C++编写的DLL。以此来调用C/C++实现的函数。
Java调用C++
Java语言的写法:
package com.dhdave.maker;
/**
* @author DHDave
*
*/
public class Maker {
static {
System.loadLibrary("Maker");
}
@SuppressWarnings("javadoc")
public native int DisplayMakerInfo(String info);
@SuppressWarnings("javadoc")
public static void main(String[] args) {
int length = (new Maker()).DisplayMakerInfo("Hello Maker JNI !");
System.out.println(length);
}
}
用native关键字定义的方法用C/C++实现。
PUBLISHED ON February 10, 2015
Python的默认参数为编程带来了极大地便利,但同时误用默认参数也产生了不小的陷进。
默认参数的求值
在Python(34)的Documentation中,有这样一段叙述:
Default parameter values are evaluated from left to right when the function definition is executed.
Python的默认参数是从左向右求值。看下面这段代码:
param = [1, 3, 2, 4]
def func(a=param.copy(), b=param.sort(), c=param.copy()):
print(a, b, c)
if __name__ == '__main__':
func()
PUBLISHED ON February 09, 2015
一、概述
朴素的寻找第k大元可以排序,再找到第k个,时间复杂度为O(n * log(n)),但由于只需要第k大,因此这样会造成很大的时间上浪费。维护一个k大的堆的时间复杂度为O(n * log(k)),有所改进,但时间复杂度仍不够优,且实现复杂。而基于分治思想的算法可以在O(n)的时间内找到第k大的数。
二、原理
PUBLISHED ON February 09, 2015
异或(Exclusive or, XOR)是一种逻辑运算,在一些情境下,巧用异或运算能够很高效地解决问题。
异或运算的定义
异或运算的符号是^,其定义如下:
a xor b = (a & ^b) | (^a & b)
真值表:
| a |
b |
a xor b |
| 0 |
0 |
0 |
| 0 |
1 |
1 |
| 1 |
0 |
1 |
| 1 |
1 |
0 |
PUBLISHED ON February 08, 2015
Sleep Sort 是一种通过多线程的不同休眠时间的排序方法。可以很简单地用Shell脚本实现。
#! /bin/bash
function func() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
func "$1" &
shift
done
wait
PUBLISHED ON February 08, 2015
K-近邻算法(KNN, K Nearest Neighbors)是最基本、最简单、最有效的分类算法之一。KNN算法精度高、对异常值不敏感,可以有效地处理数据缺失的情况,但同时,KNN算法的计算时间复杂度和空间复杂度都很高,特别是运行时需要载入全部数据,会占用很大的内存空间。
KNN算法的基本原理:输入未分类的(没有标签的)新数据时,将新数据的每个特征与样本集中的数据所对应的特征进行比较,然后提取出最相似的分类,作为新数据的分类。一般来说,选取样本集中最相似的前$k$个元素作为分类标准。通常来说,$k$的值不大于20,选择这$k$个最相似元素中出现次数最多的分类作为新数据的分类。
PUBLISHED ON February 07, 2015
PEP 8 是Python的代码风格指南(Style Guide for Python Code),其中很多内容都来自Guido van Rossum。PEP 8 从代码格式、注释、空白、变量名、参考及权利声明等方面出发,主要提到了以下这些关于Python代码风格的问题。
代码格式(Code lay-out)
缩进(Indentation)
每一级缩进使用4个空格。当一行过长需要折行时,应该保持与换行的界定符的垂直对齐。如下例:
# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
var_three, var_four)
或者下一行采用8个空格的缩进,与其他的正常缩进区别开来,例如: