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 ...
随机推荐
- notepad++ 配置Python 调试环境 实用版
一. 安装python 1. 下载python 2.7版本并安装: 2. 在安装到自定义python的时候选择 add python to ptah项:
- vim的撤销和恢复操作以及匹配当前单词操作
今天顺便看了一下vim的一点命令,记录一下 1.撤销上一次操作和恢复上一次操作: u → undo <C-r> → redo 2.搜索上一个单词和下一个单词 * 和 #: 匹配光标当前所在 ...
- [php-src]Php扩展的内存泄漏处理思路
内容均以php5.6.14为例. 一. 封装函数时产生 memory leaks. [weichen@localhost www]$ php .php [,] [Tue Jul :: ] Script ...
- DOS:将某文件夹下面的所有某一类型文件名输出
C:\Users\lv>cd /d C:\Siemens\Teamcenter11\lib C:\Siemens\Teamcenter11\lib>dir /B *.lib >lis ...
- QQ屠龙转世-挖矿
※◆☆★☆◆※欢迎使用QQ屠龙转世辅助,如有疑问请联系作者QQ:82850696*2*测试版已停用*1*2014-8-27 14:05:59*哈密*E2873D0137C6D04F42E088AA46 ...
- Windows系统下部署安装一个/多个Tomcat8
首先从http://tomcat.apache.org/上下载Tomcat8.0压缩版的,解压到指定路径后即可. 第一:在Windows系统中安装部署单个Tomcat 对于这种情况, ...
- 利用(Tcmalloc) google-perftools优化Nginx和MySQL性能
一.安装libunwind wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz 本地下载:htt ...
- Maven 整合 spring profile实现多环境自动切换
Maven 整合 spring profile实现多环境自动切换 时间:2014-03-19 15:32来源:Internet 作者:Internet 点击:525次 profile主要用在项目多环境 ...
- 【Java学习笔记】foreach语句(高级for)
package p2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java ...
- Linux Oracle删除归档日志
今天遇到Oracle报这样的错:ORA-00257 查看了下,原来是Oracle的归档日志满了,解决方案两个 一:增加归档日志大小 二:删除无用的归档日志(我们选择这个方案) 什么也不说了Linux下 ...