Skip to content

Commit bd8ec49

Browse files
author
Mansour Torabi
committed
Grid Path Count Example Added
1 parent 1979a9f commit bd8ec49

File tree

11 files changed

+151
-27
lines changed

11 files changed

+151
-27
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
*.png
1+
*.asv

EVAL.m renamed to Fibonacci/EVAL_fibo.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
%%
66

77
% Using Recursive Method
8-
tic; Fibo1(40); toc
8+
tic; Fibo_R(40); toc
99

1010
% Using Dynamic Programming
11-
tic; Fibo2(40); toc
11+
tic; Fibo_DP(40); toc
1212

1313
%%
1414

1515
% Using Dynamic Programming
16-
tic; Fibo2(10000); toc
16+
tic; Fibo_DP(10000); toc
1717

1818
% Using Matrix Exponentiation
19-
tic; Fibo3(10000); toc
19+
tic; Fibo_M(10000); toc
2020

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function F = Fibo2(n)
1+
function F = Fibo_DP(n)
22
%%
33
% Author: Mansour Torabi,
44
% Contact: smtoraabi@ymail.com
@@ -10,22 +10,19 @@
1010
% Time Complexity : O(n)
1111
% Space : O(n)
1212

13-
Memo = [];
14-
MemoIdx = [];
13+
Memo = zeros(1,n)*nan;
14+
1515
F = Fibonacci(n);
1616

1717
function f = Fibonacci(n)
18-
if any(n == MemoIdx)
18+
if ~isnan(Memo(n))
1919
f = Memo(n); return;
2020
end
2121
if n <= 2
22-
f = 1;
23-
Memo(n) = f;
24-
MemoIdx = [MemoIdx, n];
22+
f = 1; Memo(n) = f;
2523
else
2624
f = Fibonacci(n-1) + Fibonacci(n-2);
27-
Memo(n) = f;
28-
MemoIdx = [MemoIdx, n];
25+
Memo(n) = f;
2926
end
3027
end
3128
end

Fibo3.m renamed to Fibonacci/Fibo_M.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function F = Fibo3(n)
1+
function F = Fibo_M(n)
22
%%
33
% Author: Mansour Torabi,
44
% Contact: smtoraabi@ymail.com

Fibo1.m renamed to Fibonacci/Fibo_R.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function f = Fibo1(n)
1+
function f = Fibo_R(n)
22
%%
33
% Author: Mansour Torabi,
44
% Contact: smtoraabi@ymail.com
@@ -13,5 +13,5 @@
1313
if n <= 2
1414
f = 1;
1515
else
16-
f = Fibo1(n-1) + Fibo1(n-2);
16+
f = Fibo_R(n-1) + Fibo_R(n-2);
1717
end

Grid Path/EVAL_grid_path.m

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
clc, clear
2+
3+
% Define Map (Grid Path)
4+
Map = zeros(15,10);
5+
Map(3,5) = 1;
6+
Map(6,7) = 1;
7+
Map(7,3) = 1;
8+
9+
% Visualize Map (Grid Path)
10+
MapView(Map)
11+
%%
12+
tic;
13+
N1 = GridPath_R(Map, 1,1)
14+
toc;
15+
16+
tic;
17+
N2 = GridPath_DP(Map, 1,1)
18+
toc;

Grid Path/GridMap.png

2.14 KB
Loading

Grid Path/GridPath_DP.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function N = GridPath_DP(Map, i, j)
2+
3+
[m, n] = size(Map);
4+
Memo = zeros(m,n)*nan;
5+
6+
N = GridPath(Map, i, j);
7+
8+
function nn = GridPath(Map, i, j)
9+
if i > m || j > n % if out of Map
10+
nn = 0; return;
11+
end
12+
if ~isnan(Memo(i,j)) % if in the Memo
13+
nn = Memo(i,j); return;
14+
elseif Map(i,j) == 1 % if there is obstacle
15+
nn = 0; Memo(i,j) = nn; return;
16+
else % if last step of Map
17+
if ((i == m-1)&& (j == n)) || ((i == m) && (j == n-1))
18+
nn = 1; Memo(i,j) = nn; return;
19+
else
20+
nn = GridPath(Map, i+1, j) + GridPath(Map, i, j+1);
21+
Memo(i,j) = nn; return;
22+
end
23+
end
24+
25+
end
26+
end

Grid Path/GridPath_R.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function N = GridPath_R(Map, i, j)
2+
3+
[m, n] = size(Map);
4+
5+
if i > m || j > n % if out of Map
6+
N = 0; return
7+
elseif Map(i,j) == 1 % if there is obstacle
8+
N = 0; return;
9+
else
10+
if ((i == m-1)&& (j == n)) || ((i == m) && (j == n-1))
11+
N = 1; % if last step of Map
12+
else
13+
N = GridPath_R(Map, i+1, j) + GridPath_R(Map, i, j+1);
14+
end
15+
end
16+

Grid Path/MapView.m

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function MapView(Map)
2+
3+
Mapv = Map;
4+
Mapv(1,1) = 2; Mapv(end, end) = 2;
5+
imagesc(Mapv);
6+
7+
[m, n] = size(Map);
8+
9+
hold on;
10+
for ii = 1:n
11+
plot([0.5+ii, 0.5+ii],[0.5, m+0.5],'w')
12+
end
13+
14+
for jj = 1:m
15+
plot([0.5, n+0.5],[0.5+jj, 0.5+jj],'w')
16+
end
17+
18+
axis equal;
19+
axis off;
20+

0 commit comments

Comments
 (0)