İyi günler hayırlı ramazanlar.
Şu problemi çözmemde yardımcı olursanız sevinirim.
Elimizde 10 adet sayı olsun. Bu sayıları 5'erlik iki gruba,grupların toplam değerleri birbirine mümkün olduğunca yakın olacak şekilde nasıl ayırabiliriz?
Cevaplar
:4:[6-0-9-2-5] [1-3-8-4-7] toplayınca 22 ile 23 oluyor
İlk aklıma geleni yazıyorum. 2 grup arasında olabilecek minimum fark yanılmıyorsam "1" dir. 2 grubun toplamlarını tutacak iki değişken tanımlarız ve 2 grubun toplamlarını bu değişkenlere aktarıp Do While döngüsünde while ((grup1-grup2<2) || grup2-grup1<2); şartı gerçekleşene kadar döngü çalışır. Performans değerlendirmesi tartışılır.
_
İlk aklıma geleni yazıyorum. 2 grup arasında olabilecek minimum fark yanılmıyorsam "1" dir. 2 grubun toplamlarını tutacak iki değişken tanımlarız ve 2 grubun toplamlarını bu değişkenlere aktarıp Do While döngüsünde grup1-grup2<2 şartı gerçekleşene kadar döngü çalışır. Performans değerlendirmesi tartışılır.
(grup1 - grup 2) < 2 neden böyle birşey dediniz? Ayrıca grup elemanlarını nasıl bulmayı umuyorsunuz?
_
2007'den beri29 bin mesaj
Böyle yılan şeklinde gitmeyi dene emin edeğilim belki tutar.

Ben bulmayı ummuyorum. Yapılacak iş biliyor oldugunu var sayarak bir birine yakın 2 grubu nasıl bulacağına dair ilk aklıma gelen fikri yazdım.
_
Böyle yılan şeklinde gitmeyi dene emin edeğilim belki tutar.

Sıralı sayılarda en iyi çözüm yolu bu ama sayılar birbirinden çok uzak olursa işe yaramaz. Yani 45, 20 ,13, 3, gibi abidik gubidik sayılar halinde giderse o sırayla yaptığımızda aradaki fark açılır.
_
2007'den beri29 bin mesaj
Peki küçükten büyüğe sıralayıp oldan sonra bu şekilde gruplara ayırsa yine olmaz mı?
_
Peki küçükten büyüğe sıralayıp oldan sonra bu şekilde gruplara ayırsa yine olmaz mı?
Yine olacağını sanmıyorum, ilk aklıma gelen yol oydu. Lakin onda da şöyle bir sorun olabilir: En büyük sayı 93 diyelim sonrasında 40, 34, 20 filan diye gidiyor. Böyle olduğunda ilk gruba 93 giderken 2. gruba 40 gitmiş olucak bunda sorun yok ama devamında aynı algoritmayla birinci gruba 20 giderken 2. gruba 34 gidicek ( aradaki farkı dengelemek için ). Sorun da burda başlıyor, ilk gruba 20 yerine çok daha küçük bir sayı gitmeli ki aradaki fark en aza insin. Böylelikle bir sonraki turda 2. grup kalan sayılar içindeki en büyük sayıyı da alıp farkı küçültsün.
Yani, sizin önerdiğiniz ve benim de ilk aklıma gelen çözüm de etkili olmayacaktır..
Edit: Yazım hatası..
İyi günler hayırlı ramazanlar.
Şu problemi çözmemde yardımcı olursanız sevinirim.
Elimizde 10 adet sayı olsun. Bu sayıları 5'erlik iki gruba,grupların toplam değerleri birbirine mümkün olduğunca yakın olacak şekilde nasıl ayırabiliriz?
(10 adet sayımız var ve bu sayıları bilmiyoruz bu nedenle onları a1-a2-a3-...-a9-a10 diye isimlendiriyorum)
1. başla
2. a1 - a10 sayılarını oku.
3. sayıları büyükten küçüğe (küçüten büyüğe de olabilir fark etmez) sırala
4. (1. sayı + 2. sayı + 9. sayı + 10. sayı + 5. sayı = 1. grup)
(3. sayı + 4. sayı + 6. sayı + 7. sayı + 8. sayı = 2. grup)
5. bitir
_
(10 adet sayımız var ve bu sayıları bilmiyoruz bu nedenle onları a1-a2-a3-...-a9-a10 diye isimlendiriyorum)
1. başla
2. a1 - a10 sayılarını oku.
3. sayıları büyükten küçüğe (küçüten büyüğe de olabilir fark etmez) sırala
4. (1. sayı + 2. sayı + 9. sayı + 10. sayı + 5. sayı = 1. grup)
(3. sayı + 4. sayı + 6. sayı + 7. sayı + 8. sayı = 2. grup)
5. bitir
Bu çözüm yolu da az öncekine benziyor. Ilk 2 sayı birbirine çok yakın ver çok büyüklerse ve kalan sayılar birbirine yakın değerlerse bu algoritma da pek uygun bir çözüm olmayacaktır.
Hep muhalefet ediyor gibiyim ama en uygun sonucun elde edilmesin için uğraşıyorum. Programlamanın en önemli kısmı algoritma geliştirme kısmı olduğu aşikar, oluşturulan sağlam bir algoritma için kod yazmak gerçekten çok kolay bir iş.
Bu çözüm yolu da az öncekine benziyor. Ilk 2 sayı birbirine çok yakın ver çok büyüklerse ve kalan sayılar birbirine yakın değerlerse bu algoritma da pek uygun bir çözüm olmayacaktır.
Hep muhalefet ediyor gibiyim ama en uygun sonucun elde edilmesin için uğraşıyorum. Programlamanın en önemli kısmı algoritma geliştirme kısmı olduğu aşikar, oluşturulan sağlam bir algoritma için kod yazmak gerçekten çok kolay bir iş.
Algoritma zaten muhalefet işi eğer bir açık varsa o algoritma çöp demektir. Başka algoritma oluşturmayı deneyeyim.
_
Aklıma gelen bir yol var ama kağıt kalem alıp tam olarak oluşturmayı denemedim. Yarın sabah sağlam kafayla bir deneyeceğim. Şöyle ki:
Sayıların büyükten küçüğe sıralı olduğunu düşünelim, ilk sayı en büyük, 10. sayı en küçük.
1. sayı 1.gruba, 2. sayı 2. gruba burası kesin
2. tur için: 1. grup en küçük sayıyı alıcak ve içerisindeki sayıları toplayacak. 2. grup diğer kalan sayıları tek tek deneyecek. Yani 2. gruba 3. sayı gidip, 2. gruptaki elemanların toplamı alanacak. 1. grup ve 2. grup arasındaki fark en küçük olduğunda bir sonraki tura geçilecek ve tekrar aynı işlem uygulanacak.
Aslında kendim sayıları 2 gruba ayırırken de bu yolu düşünüyorum, aşağı yukarı tabi ki daha gelişmiş versiyonunu daha hızlı bir şekilde ( insan beyni muazzam bişi ). Yüzde 70 ihtimalle doğru sonucu çıkartıcaktır ama kesinlikle yeterli değil. Üzerine odaklanılıp geliştirilebilir.
Bütün sayıları toplayıp 2'ye böl.
Daha sonra bulduğun sonuca en yakın toplamı bul.
O toplamı veren 1.grup olur, kalanları 2.grup olarak ata.
benimde ilk aklıma gelen
__kadıköyRAP__ inde dediği gibi sıralamaktı ama sonradan @__L__
nin dediği aklıma geldi olmaz dedim.
şöyle olmalı gruplara koyulan sayılar sürekli kontrol edilmeli.
mesele ilk sayılar diyelim 10 ve 50, iki gruba attık. sonraki sayılarda 70 ve 80 olsun bu iki sayı arasındada bir seçim olmalı bu sefer 70 ilk gruba değilde 2. gruba 80 de ilk gruba atılmalı. ve iki grup arasındaki fark gene kontrol edilmeli. ondan sonraki 2 sayıya geçelim onlarda 100 135 olsun. gene 135 ikinci gruba atılmalı ve 100 ilk gruba atılmalı.
yani kısaca dediğim şu ki gruplar arasındaki fark sürekli kontrol edilmeli. küçük olan gruba sıradaki 2 sayidan büyük olan eklenmeli. diğer sayida diğer gruba. sanırım en yakın böyle kontrol edebilirz. ama daha detaylıda olabilir. sadece sıradaki 2 sayı değilde diğer tüm sayılarıda kontrol edebilir. şöyle diyim mesela. iki grup arasında 40 fark varsa diğer sayılar arasındaki farklar kontrol edilmeli ve arasındaki fark 40 olan iki sayı seçilecek ve küçük gruba büyük sayı, büyük gruba küçük sayı gelecek şekilde ekleyecek.
tüm bunları algoritma olarak nasıl yazacaz orasını bilmiyorum ama benim fikrim böyle :)
1-tüm sayıları diziye büyükten küçüğe göre sırala
2-dizi içerisindeki sayıları topla
3-toplanan sayı tek ise 1 eksilt 2ye böl xTop ve yTop+1 şeklinde 2 dizi değişkene ata
toplanan sayı çift isede 2ye böl
4- x dizi değişkeni oluştur tüm sayıların bulunduğu dizideki ilk elemanı yazdır(ilk eleman büyük olan)
xTop dan sayıyı çıkar sonuc 0 a eşit ise diğer sayıları y dizisine at değil ise dön
_
2007'den beri29 bin mesaj
Bütün sayıları toplayıp 2'ye böl.
Daha sonra bulduğun sonuca en yakın toplamı bul.
O toplamı veren 1.grup olur, kalanları 2.grup olarak ata.
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
Sanki eliyle toplayacak, bilgisayarın işi ne uğraşsın makine :P
_
2007'den beri29 bin mesaj
Saniyede bilmem kaç milyon işlem yapıyor zaten :D
- Sayilari siralariz
- 1. + 10. A grubuna
- 2. + 9. B grubuna
- 3. + 8. A grubuna
Seklinde A ve B gruplari olusur. Toplamlar da birbirine yakin olur.
_
- Sayilari siralariz
- 1. + 10. A grubuna
- 2. + 9. B grubuna
- 3. + 8. A grubuna
Seklinde A ve B gruplari olusur. Toplamlar da birbirine yakin olur.
Bunu yukarıda tartışmıştık zaten, toplamları birbirine yakın olmaz. Sayılara bağlı olarak çok değişiklik gösterir, birbiriyle hiç alakası olmayan 2 grup oluşturabilir. bt38 in çözüm yolu mantıklı duruyor ama denemeden emin olunamaz. Şuana kadar çıkan en mantıklı sonuç bu gibi ama.
Bunu yukarıda tartışmıştık zaten, toplamları birbirine yakın olmaz. Sayılara bağlı olarak çok değişiklik gösterir, birbiriyle hiç alakası olmayan 2 grup oluşturabilir. bt38 in çözüm yolu mantıklı duruyor ama denemeden emin olunamaz. Şuana kadar çıkan en mantıklı sonuç bu gibi ama.
Yukarida tartisilanla ayni sey degil. Ayrica, bir ornekle curutebilir misin?
_
Yukarida tartisilanla ayni sey degil. Ayrica, bir ornekle curutebilir misin?
sayılar: 91, 23, 22, 21, 20, 19, 18, 17, 16, 15
Nasil curuttun anlamadim?
Daha ucuk ornek:
1, 2, 3, 100
Diyorum ki:
100 + 1 A grubu
2 + 3 B grubu
101 ve 5 var, fark 96
95 fark olacak sekilede dizebilir misin?
_
Nasil curuttun anlamadim?
Daha ucuk ornek:
1, 2, 3, 100
Diyorum ki:
100 + 1 A grubu
2 + 3 B grubu
101 ve 5 var, fark 96
95 fark olacak sekilede dizebilir misin?
Yukarıda ne yazdığını unuttun sanırım. Hatırlatma olarak:
- Sayilari siralariz
- 1. + 10. A grubuna
- 2. + 9. B grubuna
- 3. + 8. A grubuna
Bu senin az önceki algoritmandı.
Edit: 10 tane sayı var elimizde..
Yukarıda ne yazdığını unuttun sanırım. Hatırlatma olarak:
- Sayilari siralariz
- 1. + 10. A grubuna
- 2. + 9. B grubuna
- 3. + 8. A grubuna
Bu senin az önceki algoritmandı.
Edit: 10 tane sayı var elimizde..
Size kolay gelsin...
L
Şimdi beyler o değil de, neden rakamların tek tek hangi grupta olması gerektiğine bilgisayar bakmıyor ?
hepsini denesin ve olabilecek en düşük ihtimalli sistemi kullanarak sayıları gruplara ayırsın...
_
Şimdi beyler o değil de, neden rakamların tek tek hangi grupta olması gerektiğine bilgisayar bakmıyor ?
hepsini denesin ve olabilecek en düşük ihtimalli sistemi kullanarak sayıları gruplara ayırsın...
Rakamların hangi grupta olması gerektiğine neye göre bakıcak? Hepsini neye göre deneyecek?
Cevabi buldun mu bilmiyorum ama aklima geleni yaziyorum direk, butun olasiliklari dusunmeden yaziyorum. sayilarim toplaminin yarisini bul. sonra da elinde olan sayilardan herhangi bes tanesini toplayarak sayilarin ortalamasina en yakin olan secenegi bul. diger grupla minimum fark elinde olacaktir diye tahmin ediyorum. bi suru cevap gelmis, arada varsa buna benzer bu cevabi gormezden gelebilirsin :)
L
Rakamların hangi grupta olması gerektiğine neye göre bakıcak? Hepsini neye göre deneyecek?
10 rakamın kaç farklı dizilişi var ki ?
oturup tek tek yerleştirsin hepsini, baksın en az fark hangisinde, işi ne !?
Cevabını yaz
Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.