Google Public DNS

Google Public DNS不一定是最快的,但一定是目前简单最好记的,IP如下。

8.8.8.8
8.8.4.4

使用方法见Using Google Public DNS,同时还有电话支持

877-590-4367 美国
770-200-1201 其它地区

著名OpenDNS提供的服务器IP已经算好记的了:

208.67.222.222
208.67.220.220

与Google提供的相比真是小巫见大巫。

Android系统截屏方法

由于之前的截屏软件在1.6的系统上不能正常使用,没办法只有采用联机调试模式来截屏了。大致过程如下:

  1. 安装Android SDK。
  2. 启用USB Debugging模式
    在手机,设置->应用程序->开发部署(Settings->Applications->Development)设置。
  3. 运行DDMS
    这个文件在Android SDK的tools文件夹中,运行后按快捷键CTRL-S,即可获得当前手机所显示的屏幕截图,要截取什么图就将手机切换到相应的界面就行了,可以保存成PNG格式。

国际信息学奥林匹克竞赛所需的知识和能力

由于信息奥林匹克竞赛没有统一的大纲,所以教师普遍感到指导起来特别困难。指导信息学奥林匹克竞赛的教师必须了解所涉及的基本知识,不断扩充新的知识。

信息学奥林匹克竞赛的比赛方式是让选手在限定的时间内,用计算机编程的方法解决给定的任务。优胜者将是具有创新能力、对信息科学技术领域的知识有较广博涉猎的选手。

信息学奥林匹克竞赛所需要的知识和能力包括:

  1. 数学建模的知识和能力
    既要有常用的数学知识,如代数、几何、组合数学(主要包括加法原理、乘法原理、排列与组合、递推关系、鸽巢原理、容斥原理、母函数、Polya原理、拉丁方)、数论(主要包括整除和同余等)等,又要有把实际问题转化为数学模型的能力。
  2. 算法分析与设计的知识和能力
    建好数学模型后必须用相关的算法来解决数学问题,由于程序的计算时间也是检查的范围,所以必须有优化算法的能力,要掌握时间的复杂性分析的相关知识。
    常用的算法设计方法有:

    1. 递归方法。递归是通过调用自身来完成与自身要求相同但规模较小的子问题的求解,可以简化程序,但功能强大,能求解许多问题,如阶乘函数、Fibonacci数、Hanoi塔问题等。所以,应用算法解决实际问题时,递归方法是非常有效的。
    2. 分治策略。分治策略是“分而治之”的意思,即把原问题分解成若干个子问题,用求解子问题来解决原问题,往往比较简单。利用分治策略可以解决涉及二分查找、整数乘法、矩阵乘法等的实际问题。
    3. 动态规划问题。动态规划方法是将要求解的问题逐层分解成一级一级、规模逐步缩小的子问题,知道可以直接求出其解的子问题为止。分解成的所有子问题按层次关系构成一棵树,树根就是原问题。动态规划方法可以解决涉及最短路劲问题、旅行商问题、矩阵链乘问题、最长公共子序列问题、图的任意两点间的最短距离问题、整数规划问题、可靠性问题、同顺序流水作业的任务安排问题、设备更新问题等的实际问题。

    常用的算法有:

    1. 排序算法。包括冒泡排序、堆排序、归并排序、递归排序、插入排序、Shell排序、基数排序、下溢排序、插入归并排序等。但要注意,对任意n个数的排序,基于比较的排序算法,理论上已经证明其时间复杂性的下界约为nlog2^n-1.44n+0.5log2^n+1.325。目前最好的排序算法是Ford-Johnson归并插入分类法,其时间复杂性为nlog2^n-4n/3+0.5log2^n+(15+(-1)^m)/12(其中n=2^m),已接近理论下界。任何比它好的算法,一般都是对特殊的问题而言的。
    2. 最短路径有关的算法。包括最短路径问题、旅行商问题、Kruskal算法、Prim算法、Dijkstra算法、遗传算法等。
    3. 矩阵乘积算法。包括Strassen算法、Winograd算法、“三个苏联人算法”。
    4. 数据压缩算法。包括Huffman编码、FFT算法等。
    5. 作业调度算法。包括同顺序的Flowshop问题、带时间期限的Flowshop问题、并行机问题等。
    6. 线性规划和整数规划问题。
    7. 关于树的算法。包括二分树、AVL树、2-3树、2-3-4树等。
    8. 分支界定法。
    9. 并行算法。
    10. 深度优先搜索(DFS)算法和广度优先搜索(BFS)算法。
    11. 网络流算法。包括最大流和最小费用流算法。
    12. Greed算法。
    13. 随机化和近似算法。
  3. 数据结构和程序设计的知识和能力
    利用算法解决了数学问题后必须用程序来实现,所以必须有相关的数据结构知识(主要包括线性表、串、数组、树、图、指针和链表)和程序设计能力、学生必须掌握一种程序设计语言。

安装golang程序语言

Google的程序设计语言The Go Programming Language发布的时候安装了一下,当时官方安装说明文档不是很清晰,安装过程中还Google很多资料才得以成功,遂记录之。
1.在加入环境变量(最初的文档这里说得最含糊了)

在~/.bashrc加入如下环境变量
export GOROOT=$HOME/go
export GOOS=linux
export GOARCH=386
export GOBIN=$HOME/bin
export PATH=$GOBIN:$PATH
注意:$GOARCH为目标的版本,有amd64/386/arm可供选择。

2.安装Mercurial以获得仓库代码(如果没有hg的话,有则跳过这步)

$ sudo apt-get install python-setuptools python-dev
$ sudo easy_install mercurial

3.从仓库中获得代码

$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

4.建立GOBIN文件夹

$ mkdir $GOBIN

5.进入资料夹src目录,执行编译

$ cd $GOROOT/src
$ ./all.bash

稍等两三分钟后,看到下面的信息就表示安装成功了。

0 known bugs; 0 unexpected bugs

部分地区可能由于网络的缘故会出现某些网址访问不到的情况,但不一定会导致安装失败,试试编译命令能不能用,例如编译下面的Hello, world!程序。

6.写例子程序测试编译命令

package main
 
import "fmt"
 
func main() {
        fmt.Printf("Hello, world!\n")
}

保存为hello.go后编译执行

$ 8g hello.go
$ 8l hello.8
$ ./8.out

看到有Hello, world!输出那就正常了。出错就继续折腾吧。Have fun!