Skip to content

Commit 6c68780

Browse files
authored
Adiciona Algoritmo de Dijkstra, Calculo do PI e Comb sort
1 parent 4382a50 commit 6c68780

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

src/ruby/algoritmo_dijkstra.rb

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Algoritmo de Dijkstra em Ruby
2+
# Carlos Alves
3+
# https://github.com/EuCarlos
4+
5+
def dijkstra(matrix, n)
6+
visited = Array.new(n)
7+
8+
for i in 1..n-1
9+
min, min_value = nil, nil
10+
11+
for j in 1..n-1
12+
if !visited[j] && (!min_value || matrix[j][0] < min_value)
13+
min = j
14+
min_value = matrix[j][0]
15+
end
16+
end
17+
18+
visited[min] = true
19+
20+
for j in 1..n-1
21+
if matrix[min][0] + matrix[min][j] < matrix[j][0]
22+
matrix[j][0] = matrix[min][0] + matrix[min][j]
23+
end
24+
end
25+
end
26+
end
27+
28+
def main
29+
n_vertices = 5
30+
31+
matrix = []
32+
ignore = 4294967295
33+
34+
matrix.push([0, 6, 10, ignore, ignore])
35+
matrix.push([6, 0, ignore, 2, ignore])
36+
matrix.push([10, ignore, 0, 1, 3])
37+
matrix.push([ignore, 2, 1, 0, 8])
38+
matrix.push([ignore, ignore, 3, 8, 0])
39+
40+
matrix.to_a.each {|row| puts row.inspect}
41+
42+
dijkstra(matrix, n_vertices)
43+
44+
puts "============================================================"
45+
puts "Total caminho mais curto do vertice 0 ao 4: #{matrix[4][0]}"
46+
puts "============================================================"
47+
48+
matrix.to_a.each {|row| puts row.inspect}
49+
end
50+
51+
main()

src/ruby/calculate_pi.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Calculo do PI (Leibniz) em Ruby
2+
# Carlos Alves
3+
# https://github.com/EuCarlos
4+
5+
def calculate_pi(number)
6+
denominator = 1.0
7+
operation = 1.0
8+
pi = 0
9+
10+
for count in 1..number
11+
pi += operation * (4.0 / denominator)
12+
denominator += 2.0
13+
operation *= -1.0
14+
end
15+
16+
return pi
17+
end
18+
19+
def main
20+
terms = [10, 1000, 100000, 10000000]
21+
22+
terms.each do |term|
23+
puts "PI #{term}: #{calculate_pi(term)}"
24+
end
25+
end
26+
27+
main()

src/ruby/comb_sort.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Algoritmo de Comb sort em Ruby
2+
# Carlos Alves
3+
# https://github.com/EuCarlos
4+
5+
def comb_sort(arr)
6+
gap = arr.length
7+
shrink = 1.3
8+
swapped = true
9+
10+
while gap > 1 || swapped do
11+
gap = (gap / shrink).floor
12+
gap = 1 if gap < 1
13+
swapped = false
14+
15+
for i in 0..(arr.length - gap)-1
16+
if arr[i] > arr[i + gap]
17+
arr[i], arr[i + gap] = arr[i + gap], arr[i]
18+
swapped = true
19+
end
20+
end
21+
end
22+
23+
return arr
24+
end
25+
26+
array = [86, 16, 10, 39, 49, 6, 32, 57, 72, 29]
27+
print "Lista: #{array} \n"
28+
print "Lista Ordenada: #{comb_sort(array)}"

0 commit comments

Comments
 (0)