- 浏览: 31400 次
- 性别:
- 来自: 西安
最新评论
文章列表
正则表达式是一种强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式构造复杂的文本模式,并对输入的字符串进行搜索。
简单的来说,正则表达式就是以某种方式来描述字符串。
java从jdk1.4开始支持正则 ...
4)遍历
遍历是链表最经常的操作之一,为了方便核心应用遍历链表,Linux链表将遍历操作抽象成几个宏。
在介绍遍历宏之前,我们先看看如何从链表中访问到我们真正需要的数据项:
a)由链表结点到数据项变量
由上面的分析 ...
一、链表数据结构简介
链表是一种常用的组织数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量, ...
内核模块是Linux内核向外部提供的一个接口,其全称是
动态可加载内核模块(Loadabkle Kernel Module,LKM)。
Linux
内核之所以提供模块机制,是因为它本身是一个单内核(
monolithic
kernel
)。单内核的最大优点是效率高, ...
求组合数
从n个数里面取m个数 (递归实现)
/**
* Description:
* 求组合数(递归法)
* 从n个数里面取m个数 算法分析:
* 用递归的方法,每选出一个数字之后就把这个数字去掉,用剩余的数字继续递归
* @author cm
*
*/
public class Combination
{
private int m;
private int[] res; //存放结果数组
private int[] arr; //被选择的数组
private int count = 0;
private int total = ...
定义一个结构体:
#define LENGTH 256
struct book
{
char title[LENGTH];
char author[LENGTH];
float value;
};
初始化方法:
(1)使用一个花括号括起来、逗号分隔的初始化项目列表进行初始化。每个初始化项目必须和要初始化的结构体成员类型相匹配。(类似于数组的初始化)
例如:
struct book java = {
"Thinking in Java",
"Bruce Eckel",
108.00
...
为了动态修改XHTML元素,必须能访问XHTML元素,DOM提供了2种方式来访问XHTML元素:
-- 根据id访问
-- 利用节点关系访问
(1)根据ID访问XHTML元素
document.getElementByID(idVal) : 返回文档中id属性值为idVal的XHTML元素
例如:
<script type="text/javascript">
function accessById()
{
alert(document.getElementById("a").innerHTML + "\ ...
与0-1 背包问题类似,所不同的是在选择物品i 装入背包时,可以选择物品i 的一部分,而不一定要全部装入背包.
算法分析:
首先计算每种物品的单位重量的价值, 然后依贪心策略,将尽可能多的单位重量价值最高的物品装入背 ...
0-1背包问题:
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的总容量为c。
问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包,因此该问题称为0-1背包问题。
该问题的形式化描述是:
0-1背包问题具有最优子结构性质,可用动态规划法解决。
解法一:
动态规划
算法分析:
1)设m(i, j)是背包容量为j,可选物品为0,1,...,i时0-1背包问题的最优值。
2)递归式
m(i, j) = 0 ...
装载问题
有一批共n个集装箱要装上两艘载重量分别为c1和c2的轮船,集装箱总重量小于等于c1+c2,要求定一个合理的装载方案可将这n个集装箱装上这两艘轮船。
可以证明,如果一个给定装载问题有解,则采用下面的策略可得到最优的装载方案:
1)首先将第一艘轮船尽可能装满
2)将剩余的集装箱装上第二艘轮船
将第一艘轮船尽可能装满等价于选取全体集装箱的一个子集,使该子集中集装箱重量之和接近第一艘轮船载重量c1.
该问题类似于0-1背包问题,可以用动态规划法解决。
用回溯法解装载问题时,用子集树表示其解空间显然是最合适的。
回溯法实现:
/*
* 装载问题
* 有 ...
问题描述:
有一批集装箱要装上一艘载重量为C的轮船,要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
算法分析:
采用重量轻者先装的贪心选择策略,可产生最优装载问题的最优解。
算法实现:
OptinalLoading.java
/*
* 最优装载
* 有一批集装箱要装上一艘载重量为C的轮船。
* 要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
* 算法分析:
* 采用重量最轻者先装的贪心选择策略
*
* date: 2010/12/12
* auther:cm
*
*/
import java.util.Ar ...
快速排序(quick sort)是最有效的排序算法之一。
C实现的快速排序算法的函数名为qsort(), qsort()函数对数据对象数据进行排序。其函数原型在头文件stdlib.h中
其原型为:
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *,const void *));
第一个参数为指向要排序的数组头部指针,因为任何数据类型的指针可以转化成void类型指针,故qsort()的第一个参数可以指向任何类型的数组;
第二个参数为要排序的元素数量;
第三个参数为数组中数据对象的大 ...
问题描述:
1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
这个问题其实是个比较典型的递推问题,每2个空瓶都可以再换1瓶新的汽水,这样一直递推下去,直到最后不能换到汽水为止。
解法一:
/*
* description:
* 1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
*
* auther: cm
* date:2010/11/28
*/
#include <stdio.h>
#define MONEY 20 //钱数
#define PRICE 1 / ...
最大子段和问题
解法三:
算法分析:
对于序列a,设j代表当前序列的终点,i代表当前序列的起点
分析:如果a[i]是负的,那么它不可能是最大子段的起点,因为任何包含a[i]为起点的子段都可以通过 用a[i+1]为起点而得到改进。类似的,任何负的子段都不可能是最优子段的前缀(原理相同). 如果在循环中检测到a[i]到a[j]的子段是负的,那么可以推进i.
结论:不仅能把i推进到i+1,而且可以一直推进到j+1.原因:令p为i+1和j之间的任一下标。开始于下标p的任意子段都不大于从下标i开始并包含从a[i]到a[p-1]的子段,
因为a[i ...
最大子段和问题
解法二:分治法
算法分析:
最大子段和可能在三处出现。
1)整个出现在输入数据的左半部
2)整个出现在右半部。
3)跨越输入数据的中部从而位于左右两半部分之中
前两种情况可以递归求解,第三种情况的最大和可以通过求出前半部分的最大和(包含前半部分的最后一个元素)
以及后半部分的最大和(包含后半部分的第一个元素)而得到,前后两部分和相加。
三部分中的最大者,即为最大子段和.
例如:
前半部分 后半部分
4 -3 5 -2 -1 2 6 -2
其中前半部分的最大子段和为6(A1到A3),而后半部分的最大子段和为8(A6到 ...