[]

[Algoritma] Rastgele Sayı Üretmek

Bir matrisi rastgele boyutlu bloklara ayıracağım. Bunun için, toplamları N olan X tane rastgele pozitif tamsayı üretmem gerekiyor.

Nasıl yapsam?


 
bunun için sistem saati alınır genelde. system clock diye alınan şey her an değişen bi sayı ve büyük bi sayıdır. bunun için bu sayıyı alıp uygun bi sayıya göre mod'unu alırsın. sonra n olana kadar alıp sürekli toplamaya devam edersin. olabilir mesela.


  • tepedeki psychedelic adam  (18.11.09 00:34:49) 
0-N arasında random bir sayı üret. a olsun bu sayı.
N-a'ya bak, eğer 0'dan büyükse N-a ile 0 arasında bir sayı üret, N=N-a ve yeni sayı b olsun.
N-b'ye bak. Eğer 0'dan büyükse N-b ile 0 arasında...

Recursion ile yaparsın sanırım. Bu şekilde N boyutunda bir matrisi en az 1 en fazla N parçaya bölersin.
  • crown  (18.11.09 00:44:58) 
Söylemeyi unutmuşum, seed'li olacak zaten, pseudo-random.

1 ile (N-X) arasında bir sayı üreterek başlasam daha doğru olacak sanırım, çünkü X tane sayı olmak zorunda ki X tane bloğa bölebileyim.
  • fadetoreality  (18.11.09 00:53:07) 
ben x'i herhangi bi sayı olarak düşünmüştüm. n belli olan sayı, x de bilinmeyen için kullanılır ya genelde. aklım oraya kaymış. yine x - 1 tane random sayı bulup toplayıp sonuncusunu da n-x yapabilirsin o zaman mesela. yine mi yanlış anladım bilmiyorum ama. o x-1 içindeki sayıları da toplamları n'i geçmicek şekilde filan bulman lazım tabi. sen de herhalde bunun için bi yöntem soruyodun herhalde yine yanlış anlamadıysam. neyse zaten bişeyler yapmaya karar verdin herhalde, ben daha fazla konuşmıyım.


  • tepedeki psychedelic adam  (18.11.09 01:34:38 ~ 01:39:43) 
merhabalar kolay gele

oncelikle crown un ve tepedeki psychedelic adamin urettigi algoritmalarda bir sorun var zannederim.

Bu algoritmalarda ilk uretilen sayilar sonraki uretilen sailardan daha buyuk olma egiliminde,

bu algoritmayi yazdim ve N=1000 X=30 icin uyguladim
(not: burada X i parca sayisi olarak aliyorum yani sana toplami 1000 eden 30 sayi uretecek bu algoritma. Bu 30 sayida sira ile sutunlarin genisligi olacak, Not bu algoritmayi sadece durumu gostermek icin yazdigimdan 0 genisligindeki sutunlari eleyecek bir seyler eklemedim algoritmaya)

bu algoritma (matlab da yazilmis)

clear all
clc

N=1000
X=30
u=[];
for(i=1:(X-1));
u(i,1)=round(N*rand(1));
N=N-u(i,1);
end
u=[u;N];
u'


bu da programin ciktisi


Columns 1 through 13

669 63 99 78 89 0 2 0 0 0 0 0 0

Columns 14 through 26

0 0 0 0 0 0 0 0 0 0 0 0 0

Columns 27 through 30

0 0 0 0



sayilarin giderek kuculdugunu gorebilirsin.

altarnatif ise soruyu biraz farkli ele almak

bu soru elinde N atne bilye var ve bunlari x tane kutuya atmak istiyorsun sorusu ile ayni

Ancak biz sonucta bos kutu kalmasini istemedigimiz icin once, her kutuya 1 bilye atarak basliyoruz sonra

elimizde kalan N-X tane bilyeyi kutulara rasgele atarak elimizdeki bilyeleri bitiriyoruz. Sonucta kutulardaki bilyeler de bizim rasgele dagilim oluyor.

matlab da algoritmasi soyle olabilir

clear all
clc

N=1000
X=30
u=ones(X,1);
for(i=1:(N-X));
k=ceil((X)*rand(1));
u(k,1)=u(k,1)+1;
end
u'


bu da programin ciktisi

ans =

Columns 1 through 13

28 32 31 28 28 36 34 30 30 33 25 37 42

Columns 14 through 26

46 20 36 37 46 33 26 34 32 37 26 41 37

Columns 27 through 30

31 31 40 33

gordugun gibi dagilim cok daha homojen.

hadi kolay gelsin sorun olursa yaziver.
  • selfadjoint  (18.11.09 09:22:45) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.