İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Sinema Dizi Akıllı Ev Motosiklet Mikromobilite Kripto Para Sağlık Teknolojileri Son dakika Yazarlar
Mustafa Kemal Atatürk

Cumhuriyetimizin kurucusu Gazi Mustafa Kemal Atatürk'ü vefatının 88. yılında saygı ve özlemle anıyoruz.Gazi Mustafa Kemal Atatürk'ü saygı ve özlemle anıyoruz.Atatürk'ü saygı ve özlemle anıyoruz.

  1. Ana sayfa
  2. SDN Forum
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Algoritma sorunu

Konu bilgisi

75cevap
9.371görüntüleme
15.08.2012açıldı
28.08.2012son cevap

#61
Bence kısmı olduğu aşikar, oluşturulan sağlam bir algoritma için kod yazmak gerçekten çok kolay bir
Friv
Cevaplar
#62
Basite indirgediğimizde olayın kolayca çözülebileceğini düşünüyorum. (a+b+c+d+e)-(f+g+h+i+j). Bu şekilde düşünmek yerine (a-f)+(b-g)+(c-h)+(d-i)+(e-j) şeklinde düşünürsek daha rahat düşünebiliriz. |(a-f)+(b-g)+(c-h)+(d-i)+(e-j)| biz bu ifadenin olabildiğince küçük olmasını istiyoruz. Amma ve lakin ben yine rahatça düşünemiyorum :DDDD
#63
Sıralı sayılarda işlemin çok basit olmasının nedeni, küçükden büyüğe sıraladığımızda bütün farkların eşit olmasıdır. 1,2,3,4,5,6,7,8,9,10 farketmez, 2,4,6,8,10,12,14,16,18,20 de basittir. Farkların eşit olmamaması durumu değiştiriyorsa farklar üzerinden gitmemiz gerek. Ama kafam durdu biliyor musunuz yorgunum.. Neyse..
#64
s1,s2,s3,s4,s5,s6,s7,s8,s9,s10 dizisi küçükten büyüğe sıralanmış hali olsun.
1) S10 1. grup ve S9 2.gruba yerleştirilir.
2) S8 in hangi gruba yerleşeceği şu şekilde bulunur :
s10/5 , s9/5 değerlerine göre küçük çıkan gruba sıradaki sayı atanır.
S8 --> s10/5>s9/5 ise s8 2.gruba eklenir.
S7 --> s10/5 > (s9/5 + s8/5) ise s8 2.gruba eklenir.

Örnek işlem 2 :
(Sayı/5)
s1 : 1 (0,2)
s2 : 2 (0,4)
s3 : 3 (0,6)
s4 : 8 (1,6)
s5 : 10 ( 2)
s6 : 100 (20)
s7 : 380 (76)
s8 : 390 (78)
s9 : 400 (80)
s10: 401 ( 80,2)

sayıların gruplara yerleştirilmesi
1.grup(SAYI/5) 2.grup(SAYI/5)
401 (80,2) 400 (80)
1 80,2>80 390 (78)
2 158>80,2 380 (76)
3 158>156,2 100 (20)
4 176,2>158 10 (2)
5 176,2>160 8 (1,6)
6 176,2>161,6 3 (0,6)
2. grup dolduğundan kalanlar 1. gruba 2 (0,4)
2. grup dolduğundan kalanlar 1. gruba 1 (0,2)

sonuç :
1.grup 2.grup
401 400
380 390
100 10
2 8
1 3

Örnek işlem 1 :
(Sayı/5)
s1 : 2 (0,4)
s2 : 4 (0,8)
s3 : 8 (1,6)
s4 : 12 (2,4)
s5 : 15 (3)
s6 : 20 (4)
s7 : 30 (6)
s8 : 80 (16)
s9 : 400 (80)
s10 : 5000 ( 1000)

sayıların gruplara yerleştirilmesi
1.grup(SAYI/5) 2.grup(SAYI/5)
5000(1000) 400(80)
1 1000>80 80(16
2 1000>96 30(6)
3 1000>102 20(4)
4 1000>106 15(3
2. grup dolduğundan kalanlar 1. gruba 12(2,4)
8(1,6)
4(0,8)
2(0,4)


sonuç :
1.grup 2.grup
5000 400
12 80
8 30
4 20
2 15
Misafir
#65
__kadıköyRAP__ dedi: ↑
Bunu yazmak için tekrar girmiştim konuya :)

Adam haklı bence de bu şekilde yap. 10'un 5'li kombinasyonu 10*9*8*7*6 = 30240 deneme yapacak program tabi nası yaptırırsın sana kalmış :D
Bu yaptığın işlem permütasyon, bilesin :) kombinasyon; 10! / 5!*5! den = 252 çıkıyo :)
Misafir
#66
Burdaki arkadaşlar baya baya YSA ile ilgilendiklerinin farkındalar mı acaba :) Forum çok şey katıyor bence insanlara. Mühendislik uygulaması konusunda şaşırtıcı ve çözüme yönelik, ciddi manada anlamlı cevaplar geliyor. Kutluyorum bu arkadaşlarımı :)
#67
Bilmeyen olabilir; ufak bir bilgilendirme yapayım.

YSA (Yapay Sinir Ağları) : İnsan beyninin bilgiyi işleme sistemininden faydalanarak geliştirilmiş uygulamalar ve bilgi işlem teknolojileridir.

Daha ayrıntılı bilgi için : http://tr.wikipedia.org/wiki/Yapay_sinir_a%C4%9Flar%C4%B1
#68
sithlord dedi: ↑
:) Bastan soyleyeyim, kimseyi gucendirmek gibi bir niyetim yok, eger gucendirdiysem ozur dilerim. Ozellikle seni kastederek soylememistim zaten, sanirim bahsettigin yasa moore yasasi (http://tr.wikipedia.org/wiki/Moore_Yasas%C4%B1) ama o bakin bilgisayarlar ileride cok hizlanacak algoritmalarin ne kadar verimli oldugu cok onemli degil manasinda soylenmis bir cumle degil diye dusunuyorum.

Benim demek istedigim algoritma sorularinin tamamina yakini zaten brute force denen , tum ihtimalleri deneyerek bulma yontemiyle cozulebilir ama aranan cevap bu degildir. Yok 10 elemanli soru icin benim cozumum dogru, milyonlarca eleman icinde bekleyin cok hizil iclemciler cikinca cozersiniz demekte bir secenek tabi.
yok üstadım gücenmedim, ama 10 elemanlı bir sorudan yola çıkılmış örnek durum için en uygun ve verimli çözüm şu an deneme yanlma algoritması gibi gözüküyor. :D
eSa dedi: ↑
Bilmeyen olabilir; ufak bir bilgilendirme yapayım.

YSA (Yapay Sinir Ağları) : İnsan beyninin bilgiyi işleme sistemininden faydalanarak geliştirilmiş uygulamalar ve bilgi işlem teknolojileridir.

Daha ayrıntılı bilgi için : http://tr.wikipedia.org/wiki/Yapay_sinir_a%C4%9Flar%C4%B1
üstadım yapma, bağımlılığımı depreştirmee. :D

yapay sinir ağları, insan beynindeki nöral yapının var olan kuramlarca modellenmesiydi galiba, C++ da çok şık şekilde modellenip, kendileri için var olan iki eğitim sisteminden biriyle (öğreticili eğitim, öğreticisiz eğitim) eğitim verildikten sonra, hata oranı yeterli seviyede ise artık saha testi için hazırlar demektir.

verdiğiniz bilgileri işleyerek yanılma payı en küçük olan cevapla karşınıza gelme amacı güder bu godikler. :D

üstadım denesek mi bi bu sorunu yapay sinir ağlarıyla ? :D
#69
MKOKSAL dedi: ↑
sonuç :
1.grup 2.grup
401 400
380 390
100 10
2 8
1 3
Bu sonucunuz yanlış çıkmış. Algoritmanızı detaylı olarak inceleyemedim kusura bakmayın lütfen, sadece bir göz gezdirdim ve dikkatimi çekti. 401'in 2. gruba, 400'ün ise 1. grupta olması gerekiyor, en az fark için..
#70
__L__ dedi: ↑
Bu sonucunuz yanlış çıkmış. Algoritmanızı detaylı olarak inceleyemedim kusura bakmayın lütfen, sadece bir göz gezdirdim ve dikkatimi çekti. 401'in 2. gruba, 400'ün ise 1. grupta olması gerekiyor, en az fark için..
Doğru tespit..Algoritma bu şekliyle istenileni karşılamıyor..Son olarak iki grup arasındaki farkı kapatmak için yer değiştirme yapmamız gerekecek.
Fark=Toplam1-Toplam2 olsun..Yer değiştirme için toplamı büyük olan gruptan başlayalım ve 1. elemandan başlayarak diğer grup elemanları ile işlem yapacağız..
İki grup arasındaki farkı en büyük olan 2 sayının gruplarını değiştireceğiz..
1. grup2. grup
401400
380390
10010
28
13
TOPLAM1TOPLAM2
884811
1)884-811=73401-400=11*2=2<73
401-390=1111*2<73
401-10=391391*2>73 olduğundan en büyük fark 401 ve 390 yer değiştirilir.
1. grup2. grup
390400
380401
10010
28
13
TOPLAM1TOPLAM2
873822
2)873-822=51390,380,100,2,1 sayıları diğer grupla karşılaştırılır ve 51 den küçük bir fark bulunamadığından işlem tamamlanmıştır..
#71
MKOKSAL dedi: ↑
Doğru tespit..Algoritma bu şekliyle istenileni karşılamıyor..Son olarak iki grup arasındaki farkı kapatmak için yer değiştirme yapmamız gerekecek.
Fark=Toplam1-Toplam2 olsun..Yer değiştirme için toplamı büyük olan gruptan başlayalım ve 1. elemandan başlayarak diğer grup elemanları ile işlem yapacağız..
İki grup arasındaki farkı en büyük olan 2 sayının gruplarını değiştireceğiz.
Tebrik ederim gerçekten, çözüm yolunuz çok başarılı. Nerede çalıştığınızı ve ne kadarlık bir iş tecrübeniz var öğrenebilir miyim, lütfedip söylerseniz?
#72
çok faydalı bir konu oldu bu valla, epey çözüm yolu ürettik :)
#73
MKOKSAL, Yukaridaki ilk cozume gerek yok aslinda, burada bahsettigin son cozum tek basina yeterli ve bence de en dogru cozum. Serinin sirali olmasinada gerek yok bu cozumde , algorithm complexity O(n^2) oluyor, acaba daha hizli bir cozum olabilir mi diye dusunuyorum.
#74
LeaveNhA dedi: ↑
o lafı eden benim, "işi ne hesaplasın dursun"... :D
Bir teori var, adını, yada yaratıcısını bilmiyorum.
Bilgisayar sistemlerinin hızlarının nihayi sonucu ile ilgili, her yıl bilmem kaç kat artıyormuş. (acayip uykuluyum, rakam falan yok gözümde hatırlayamıyorum)
Benim bir yazılımcı olarak fikrim, zaman ve bu birim zamanda belirli bir miktarda bilgiyi işleyebilen insan beyni hemen hemen aynı kalıcak fakat milyarlarca kat hızlı işlemciler var olucak.
öyle bir dünyada nihayi sorun, algoritmanın hızı değil, nitelik yapısı mümkünlüğü işaret eden varlık sınırları içinde ve somut sonuca götüren kod yapısının dil sınırlarına bağlı kalınarak tasarımı ve yazımıdır. ;)
yani 10000000000000 değil 1000000000000000000000000000000'de olsa o rakam, bir gün gelicek ve sadece yukarıda verdiğim yerine koyma algoritmasıyla bile sonuca gidilicek.
şimdilik 10 rakam iyidir, candır, teknoloji ilerledikçe rakamı arttırırız.
o vakte kadar da ne olur sonuç elde edilen şeyin verimliliğinden kuşku duymayın, bu paranoya başlangıcı semptomudur zaten. :D
ancak ilgili ödevin teslim tarihi biraz daha erken bir zamanda olabilir :)
#75
annttiigs dedi: ↑
ancak ilgili ödevin teslim tarihi biraz daha erken bir zamanda olabilir :)
hikayenin can alıcı kısmıda bu, zamanlama sıkıntısı... :)
#76
Böyle temel problemleri çözerken işlemcinin gücüne sırt dayamak doğru değil, hele ki gelecekte çıkacak işlemcilere güvenmek hiç doğru değil.

Biz yazılımcılar temel problemleri yapılabilecek en hızlı şekilde çözerek bunları kullanan yazılımlara hız kazandırmak. B+ tree olmasaydı bugün kullandığımız veritabanları ve dosya yönetim sistemleri olduğundan kat kat yavaş olacaktı.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.

Reklam