note of introduction of Algorithms(Lecture 3 - Part1)
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)的更多相关文章
- Reading task(Introduction to Algorithms. 2nd)
Introduction to Algorithms 2nd ed. Cambridge, MA: MIT Press, 2001. ISBN: 9780262032933. Introduction ...
- 6.006 Introduction to Algorithms
课程信息 6.006 Introduction to Algorithms
- 算法导论(Introduction to Algorithms )— 第十二章 二叉搜索树— 12.1 什么是二叉搜索树
搜索树数据结构支持很多动态集合操作,如search(查找).minmum(最小元素).maxmum(最大元素).predecessor(前驱).successor(后继).insert(插入).del ...
- 计算机电子书 2017 BiliDrive 备份
下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 斯坦福 cs224d 深度学习与自然语言处 ...
- [Data Structures and Algorithms - 1] Introduction & Mathematics
References: 1. Stanford University CS97SI by Jaehyun Park 2. Introduction to Algorithms 3. Kuangbin' ...
- INTRODUCTION TO BIOINFORMATICS
INTRODUCTION TO BIOINFORMATICS 这套教程源自Youtube,算得上比较完整的生物信息学领域的视频教程,授课内容完整清晰,专题化的讲座形式,细节讲解比国内的京师大 ...
- [Algorithms] Graph Traversal (BFS and DFS)
Graph is an important data structure and has many important applications. Moreover, grach traversal ...
- Introduction to TensorFlow
Lecture note 1: Introduction to TensorFlow Why TensorFlow TensorFlow was originally created by resea ...
- Awesome Algorithms
Awesome Algorithms A curated list of awesome places to learn and/or practice algorithms. Inspired by ...
随机推荐
- CSS布局(二)
本节内容:position.float.clear.浮动布局例子.百分比宽度 position CSS中的position属性设置元素的位置.属性值:static.relative.fixed.abs ...
- 不容错过!2016年度优秀UI/UX设计文章
本文整理了一些2016年度最受欢迎的文章,例如有关UI / UX设计的理论知识,书籍和工具,如何做出更好的设计的方法和建议,以及新的设计趋势. 1. 2017年用户体验设计趋势 我们期待着2017年用 ...
- @helper函数使用方法
这个函数方法,我也是通过别人博客看到的,感觉不错和大家一起学习分享一下. 1.自定义函数方法,只在同一个view视图文件里调用 Controller public ActionResult Index ...
- wifi,网关相关标识的获取
获取WIFI的相关信息 - (void)getWifiInfo { NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfa ...
- liunx 字符编码问题
查询当前服务器的编码:echo $LANG 设置服务器的编码:LANG=en_US.UTF-8
- struts1拦截器
Struts2已经发布一段时间了,这个版本较struts1.x版本有了很大变化,其中一个就是增加了拦截器功能.这是个非常有用的功能,可是struts1.x却没有. 其实,struts1.x可以 ...
- c# DataTable 转为 List 类型
代码: public class ModelConvertHelper<T> where T : new() { public static IList<T> ConvertT ...
- ECMAScript6的Promise对象
1. 概念 Promise对象用于异步(asynchronouss)计算,一个Promise对象代表着一个还未完成,但预期完成的操作. 2. 出现原因: 1) 如果你需要通过ajax发送多次请求,而 ...
- express 转
目录 此文重点介绍Express3.0的开发框架,其中还会涉及到Mongoose,Ejs,Bootstrap等相关内容.Express已经升级到4.x,请同时参考文章,Node.js开发框架Expre ...
- DB2 错误信息码
000 00000 SQL语句成功完成 01xxx SQL语句成功完成,但是有警告 +012 01545 未限定的列名被解释为一个有相互关系的引用 +098 01568 动态SQL语句用分号结束 +1 ...