Lecture 3(part 1)

Divide and conquer

1. the general paradim of algrithm as bellow:

1. divide the problem into subproblems;

2. conqure each subproblems recrusively;

3. combine solution

2. Some typical problem (part 1)

the matrix mutiplication(strassen's algorithm) and the vlsi layout problem will be in the note leceture part 2.

  • binary search
/*-
* MIT introduction of algrithm
* Lecture 3: binary search
* Fredric : 2013-11-18
*/
#include<stdio.h>
#include<stdlib.h> typedef unsigned int uint; #define MAX 11
uint g_array[MAX] = {,,,,,,,,,,};
uint target = ; //target number
int binarysearch(uint start, uint end); void main(void)
{
int n = ;
printf("start to find the num:%d..\t\n", target);
if(- != (n = binarysearch(, MAX-))){
printf("the target %d has been found in num:%d", g_array[n],n);
}
system("pause");
return;
} /*-
* binary search recursive
*/
int binarysearch(uint start, uint end){
uint n = (start + end)/;
uint tmp = g_array[n]; if(target == tmp){
return n;
}else{
if(tmp > target){
return binarysearch(start, n);
}else{
return binarysearch(n+,end);
}
}
return -;
}
  • powering a number
/*-
* MIT introduction of algrithm
* Lecture 3: powering a number
* Fredric : 2013-11-17
*/
#include<stdio.h>
#include<stdlib.h> typedef unsigned int uint; //calculate the result of n^m, like n = 2, m = 3, result = 8
uint n = ;
uint m = ;// m > 1 double power_number(uint n, uint m); /*
* main function
*/
void main(void)
{
double result = 0.0;
result = power_number(n,m);
printf("the result of %d^%d is %lf /t/n", n,m,result);
system("pause");
return;
} /*-
* powering a number
* result =
* n^(m/2) * n^(m/2) if m is even
* n^((m-1)/2) * n^((m-1)/2)*n if m is odd
*/
double power_number(uint n, uint m){
if( == m){
return ;
} if( == m%){
return power_number(n,m/)*power_number(n,m/);
}else{
return power_number(n,(m-)/)*power_number(n,(m-)/)*n;
}
}
  • Fibonacci number(using matrix mutiplication)
/*-
* MIT introduction of algrithm
* Lecture 3: Fibonnaci,using the matrix method
* Fredric : 2013-11-17
*/
#include<stdio.h>
#include<stdlib.h> typedef unsigned int uint; /*-
* Input:
* pa00/01/10/11 according to the element of the Array Aij
* n: the number of the fibonacci
*/
void fibonacci_number(uint *pa00, uint *pa01, uint *pa10,uint *pa11, uint n); void main(void)
{
uint a00 = ;
uint a01 = ;
uint a10 = ;
uint a11 = ; uint num = ;//num > 0
fibonacci_number(&a00,&a01,&a10,&a11, num);
printf("The num %d fibonacci number is:%d\t\n", num, a10); system("pause");
return;
} /*-
* calculate the fibonacci number
* f(n) =
* 0 if n = 0;
* 1 if n = 1;
* f(n-1) + f(n-1) if n > 1
* the divide and conquer algrithm is:
* fn+1 fn 1 1
*( ) = ( )^n
* fn fn-1 1 0
*/
void fibonacci_number(uint *pa00, uint *pa01, uint *pa10,uint *pa11, uint n){
uint tmp00 = *pa00;
uint tmp01 = *pa01;
uint tmp10 = *pa10;
uint tmp11 = *pa11; if( == n){
return;
}else{
//Matrix mutiplication
*pa00 = tmp00 * tmp00 + tmp01 * tmp10;
*pa01 = tmp00 * tmp01 + tmp01 * tmp11;
*pa10 = tmp10 * tmp00 + tmp11 * tmp10;
*pa11 = tmp10 * tmp01 + tmp11 * tmp11;
if( == n%){
fibonacci_number(pa00,pa01,pa10,pa11,n/);
}else{ fibonacci_number(pa00,pa01,pa10,pa11,(n-)/);
uint tmp00 = *pa00;
uint tmp01 = *pa01;
uint tmp10 = *pa10;
uint tmp11 = *pa11; *pa00 = tmp00 + tmp01;
*pa01 = tmp00;
*pa10 = tmp10 + tmp11;
*pa11 = tmp10;
}
}
}

note of introduction of Algorithms(Lecture 3 - Part1)的更多相关文章

  1. Reading task(Introduction to Algorithms. 2nd)

    Introduction to Algorithms 2nd ed. Cambridge, MA: MIT Press, 2001. ISBN: 9780262032933. Introduction ...

  2. 6.006 Introduction to Algorithms

    课程信息 6.006 Introduction to Algorithms

  3. 算法导论(Introduction to Algorithms )— 第十二章 二叉搜索树— 12.1 什么是二叉搜索树

    搜索树数据结构支持很多动态集合操作,如search(查找).minmum(最小元素).maxmum(最大元素).predecessor(前驱).successor(后继).insert(插入).del ...

  4. 计算机电子书 2017 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 斯坦福 cs224d 深度学习与自然语言处 ...

  5. [Data Structures and Algorithms - 1] Introduction & Mathematics

    References: 1. Stanford University CS97SI by Jaehyun Park 2. Introduction to Algorithms 3. Kuangbin' ...

  6. INTRODUCTION TO BIOINFORMATICS

    INTRODUCTION TO BIOINFORMATICS      这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...

  7. [Algorithms] Graph Traversal (BFS and DFS)

    Graph is an important data structure and has many important applications. Moreover, grach traversal ...

  8. Introduction to TensorFlow

    Lecture note 1: Introduction to TensorFlow Why TensorFlow TensorFlow was originally created by resea ...

  9. Awesome Algorithms

    Awesome Algorithms A curated list of awesome places to learn and/or practice algorithms. Inspired by ...

随机推荐

  1. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  2. python学习之路-day6-面向对象

    一.面向对象学习 特性 class类 一个类即是对一类拥有相同属性的对象的抽象.蓝图.原型.在类中定义了这些对象的都具备的属性.共同的方法. 面向过程编程和面向对象编程: 面向过程编程:使用一系列的指 ...

  3. IOS 代码提示有问题

    Window(menu) -> Organizer(menu) -> Projects(tab) 删除 Derived Data ,立刻关闭xcode 然后重启xcode然后重新打开项目.

  4. Linux下使用Eclipse开发Hadoop应用程序

    在前面一篇文章中介绍了如果在完全分布式的环境下搭建Hadoop0.20.2,现在就再利用这个环境完成开发. 首先用hadoop这个用户登录linux系统(hadoop用户在前面一篇文章中创建的),然后 ...

  5. A multi-faceted language for the Java platform

    最近在研究关于groovy 相关的技术 希望有研究交到研究这方面的朋友 Groovy 最新的地址 http://www.groovy-lang.org/

  6. Sql日期时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...

  7. UVA11149_Power of Matrix

    题目简洁明了,给出矩阵,求前k次方和. 不知道这种方法是叫做二分幂还是倍增法,如果有知道的,请告诉我一下. 具体思想是这样的,A^1+A^2+A^3+......A^n=(E+A^(n/2))*(A^ ...

  8. 关于libsvm工具箱在64位matlab下的安装说明

    LIBSVM工具箱的安装 基本方法: 1.在网上下载LIBSVM工具箱. http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 2.将LIBSVM工具箱所在目录添加到MA ...

  9. flashftp连接虚拟机centos报错的解决方法

    flashftp连接虚拟机centos报错,一般情况可能是因为端口(22)的权限没有开放 先在centos中检查并开放22端口,执行:iptables -I INPUT -p tcp --dport ...

  10. VS2015调试UWP程序时提示错误DEP0700 : Registration of the app failed. Another user has already installed

    在同一台windows10电脑上调试过一个工程以后,切换了账号再次调试出现错误 DEP0700 : Registration of the app failed. Another user has a ...