算法入门3:分支算法(下)



算法入门3:分支算法(下)

分治算法的设计模式 – 大化小,小化了

分治算法的主要步骤就是:分解,求解,合并。

 

  1. Divide-and-Conquer(P)
  2. {
  3.          //问题规模足够小,直接解决
  4.     if(P≤n0) return(ADHOC(P);
  5.          //问题规模大,则分解为较小的子问题 P1 ,P2 ,…,Pk
  6.     divide p into smaller subinstance P1 ,P2 ,…,Pk
  7.   [......]

Read more

算法入门2:分治算法(上)



算法入门2:分治算法(上)

上一篇中讲解了算法的基本概念,算法许许多多,按照算法基本思想,大致可分为如下几类:分治算法、贪心算法、动态规划、回溯法、分支限界、概率算法和随机算法等等。这一篇讲解分治算法。

分治算法

分治即分而治之。一个问题规模过大不容易直接解决,就可以划分成许多小问题,如果小问题不容易求解,那么可以再划分成规模更小的问题,直到规模小到很容易解决为止,解决这些小问题,再将小问题的解合并成大问题的解。这就是分治算法的基本思想。

 

至于小问题的规模到底划分多大,这是没有规定的,依实际情况而定。小问题的规模可以是相等的,也可以是不相等的。可以分成简单的[......]

Read more

C++计时的几种方法说明及例程

C++计时的几种方法说明及例程

1. 使用clock() 函数

头文件:<time.h>

clock()函数,返回“自程序启动到调用该函数,CPU时钟的计时单元数(clock tick)”

每过1ms,计数值+1

精度:1毫秒

 

  1. #include <stdio.h>
  2. #include <time.h>
  3. int main()
  4. {
  5.     clock_t start,end; // typedef long clock_t
  6. [......]

Read more

有向图的邻接表存储,递归和非递归的深度、广度遍历(codeblocks+gcc)

有向图的邻接表存储,递归和非递归的深度、广度遍历(codeblocks+gcc。

程序功能:

1. 图的邻接表存储

2. 递归深度遍历

3. 非递归深度遍历(借助stack)

4. 递归广度遍历

5. 非递归广度遍历(借助queue)

 

程序中通过条件编译实现,递归与非递归的选择

  1. //#define _RECURSION_TRAVERSE                                              //递归遍历(将下一行注释,此行不注释)[......]

Read more

C++/C#中堆栈、对象内存模型、深浅拷贝、Array.Clone方法

C++/C#中堆栈、对象内存模型、深浅拷贝、Array.Clone方法。[+]

  1. CC中对象内存模型
    1. 栈内存与堆内存栈内存与堆内存
      1. 栈内存
      2. 栈内存与堆内存比较
    2. 值类型与引用类型
    3. 内存模型
  2. 深拷贝和浅拷贝
    1. 案例1
    2. 理解
    3. 案例2
  3. SystemArray的Clone方法

目录

1.     C++/C#中对象内存模型……………………………………………………………………………….[......]

Read more

C语言中可变形参简单实例和简单的printf功能的实例

C语言中可变形参简单实例和简单的printf功能的实例。

以下程序主要包括三个主要函数:

  • 一个最简单的可变形参函数实例;
  • 一个简单的printf功能的实例;
  • 一个打印字符串函数(辅助);

其中myPrintf函数,实现了printf的部分简单功能,并没有去实现格式化输出操作(%2d %.2f 等),

因为只是它一个实例而已,目的是更好理解掌握可变参数。

后续有兴趣时,我会继续完善的。

 

  1. /*************************************[......]

Read more

基于sqlite3实现的简单通讯录程序(控制台方法实例教程

基于sqlite3实现的简单通讯录程序(控制台方法实例教程。1. sqlite3 安装
1.1. 下载sqlite3源码    www.sqlite3.org    下载 sqlite-autoconf-3070701.tar.gz
1.2. 解压    将下载的 sqlite-autoconf-3070701.tar.gz 解压,得到sqlite-autoconf-3070701 文件夹
1.3. 编译源码(参照解压文件夹下的install文件)    $ cd sqlite-autoconf-3070701 #进入文件夹    $ ./configure    $ make    $[......]

Read more

c++算法入门2:分治算法(上)

c++算法入门2:分治算法(上)。

上一篇中讲解了算法的基本概念,算法许许多多,按照算法基本思想,大致可分为如下几类:分治算法、贪心算法、动态规划、回溯法、分支限界、概率算法和随机算法等等。这一篇讲解分治算法。

分治算法

分治即分而治之。一个问题规模过大不容易直接解决,就可以划分成许多小问题,如果小问题不容易求解,那么可以再划分成规模更小的问题,直到规模小到很容易解决为止,解决这些小问题,再将小问题的解合并成大问题的解。这就是分治算法的基本思想。

 

至于小问题的规模到底划分多大,这是没有规定的,依实际情况而定。小问题的规模可以是相等的,也可以是不相等的。可以分[......]

Read more

c++算法基本概念与介绍

c++算法基本概念与介绍。

1.  算法是什么

算法:顾名思义,一种计算的方法,在程序设计上,就表现为一组指令序列。

为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执行的过程是确定的。

比如我们写了代码

 

  1. int a = 10;               //a,b为输入数据
  2. int b = 20;
  3. int c = a+b;     //c为输出数据,算法为加法运算

 

这其实就是一个算法的具体实现(程序就是算法[......]

Read more

c++求素数的方法实例与解析

c++求素数的方法实例与解析。

用c++求100以内的素数

麻烦解释一下以下代码是如何实现求100以内的素数
#include <iostream.h>
#include <math.h>
int main()
{
 int i,j,m,sum=0;
 for(i=2;i<=100;i++)
 {
  m=int(sqrt(i));   
  for(j=2;j<=m;j++)
  {
   if(i%j==0)break;  
  }
  if(j>m)     
  {
   cout<<i<[......]

Read more