Skip to content

Instantly share code, notes, and snippets.

@huseyin
Last active August 29, 2015 14:15
Show Gist options
  • Save huseyin/910fbf5dbb84af9872c7 to your computer and use it in GitHub Desktop.
Save huseyin/910fbf5dbb84af9872c7 to your computer and use it in GitHub Desktop.
Algoritmik kısa sıralama
#!/usr/bin/ruby1.9.1
# encoding: UTF-8
#
# From -> Hüseyin Tekinaslan <huseyin.tekinaslan@bil.omu.edu.tr>
# Subject -> Graflardan farklı olarak çift taraflı sıralama algoritması
#
def cityLand(*datas, n)
arr = []
objects = {}
counter0, counter1 = 0, 0
# bu bölüm, *datas ile gelen noktaları(referansları) algoritmik olarak birleştirir.
# örn: "AB", "AC"...
# ancak bu bölümde "AA", "BB" gibi birbiriyle aynı iki nokta(lar) kümesi çakışabilmektedir.
# bu problem alt algoritmada çözümlenmiştir.
while counter0 < datas.size
while counter1 < datas.size
sum = datas[counter0] + datas[counter1]
if not arr.include?(sum) then arr << sum end
counter1 += 1
end
counter0 += 1
counter1 = 0
end
# birtakım ikil yol çakışmaları bu bölümde giderilmiştir.
arr.each do |x| if x == x.reverse then arr.delete(x) end end
# bu bölümde, noktalar kümesine random yol değerleri atanmıştır.
# örn: "AB"=>45, "BD"=>32
# ancak burada random sayılar noktalara bağımsız olarak atanmıştır.
# bu durum örn: "AB"=>23 iken "BA"=>34 gibi problem yaratmaktadır.
# bu problem alt algoritmada çözümlenmiştir.
while counter1 < arr.size
objects[arr[counter1]] = rand(n)
counter1 += 1
end
# nokta-yol karmaşıklığı burada çözülmüştür.
objects.each do |city, number|
if objects.include?(city.reverse)
objects[city] = number
objects[city.reverse] = number
end
end
return objects
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment