1

Konu: permütasyon serisi oluşturma

selam arkadaşlar...
1 den n 'e kadar sayıların permütasyon serilerini yapmak istiyorum.. dbf veya bir array olabilir..yani

örnek
1 den 3  kadar ..

  1,2,3
  1,3,2
  2,1,3,
  2,3,1
  3,1,2
  3,2,1

şeklinde diziler veya dbf kayıtları oluşturmam gerekiyor.. sıra önemli.

elinizde bir örnek kod var mı ?

şimdiden teşekkürler..

2 Son düzenleyen, Mehmet K (15.08.2013 20:48:40)

Re: permütasyon serisi oluşturma

Visual Fox Pro
LOCAL cTxtOrg, cTxtPerm

cTxtOrg = "1234"
cTxtPerm = ""
clear
DoIt(cTxtOrg, cTxtPerm)
 
*============
* DoIt
*============
FUNCTION DoIt(cOrginal, cPermutation)
  LOCAL nIdx
  IF EMPTY(cOrginal)
    ? cPermutation 
    RETURN
  ENDIF
 
  FOR nIdx = 1 TO len(cOrginal)
    LOCAL cOrg2, cPerm2
    cOrg2  = cOrginal
    cPerm2 = cPermutation
 
    cOrg2 = STUFF(cOrg2, nIdx, 1, "")
    cPerm2 = cPerm2 + SUBSTR(cOrginal, nIdx,1)
    DoIt(cOrg2, cPerm2)
  ENDFOR
ENDFUNC

PHP: http://docstore.mik.ua/orelly/webprog/pcook/ch04_26.htm
C++: http://www.codeproject.com/Articles/489 … tions-in-C

Ekte C++ ile bir program yazdım. Kullanim:

permutation 12345 > dosya.txt


Kolay gelsin

İleti eklentileri

Permutation.rar 142.47 kb, dosya hiç indirilmedi. 

Bu iletideki eklenti/leri indirmeye yetkiniz yok.
Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

3

Re: permütasyon serisi oluşturma

Benim de aklıma recursive yöntem gelmişti ama kafamda tam oturtamamıştım..
saol Mehmet.  hemen deneyeceğim.

4

Re: permütasyon serisi oluşturma

Forumda daha önce işlenmişti:

http://www.fox4um.com/topic/1848/kombinasyon-hesaplamasi/

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5 Son düzenleyen, ugurlu2001 (15.08.2013 23:50:15)

Re: permütasyon serisi oluşturma

Visual Fox Pro
Create Cursor xx (f1 i)

For ix=1 To 3
  Insert Into xx Values (m.ix)
Endfor
 
Select Distinct ;
  x1.f1 As c1, ;
  x2.f1 As c2, ;
  x3.f1 As c3 ;
  FROM xx x1,xx x2,xx x3 ;
  ORDER BY  1,2,3 ;
  INTO Cursor CrsPerm
 
BROWSE
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: permütasyon serisi oluşturma

Buda tekrarlamayan hali

Visual Fox Pro
Create Cursor xx (f1 i)

For ix=1 To 3
  Insert Into xx Values (m.ix)
Endfor
 
Select Distinct ;
  x1.f1 As c1, ;
  x2.f1 As c2, ;
  x3.f1 As c3 ;
  FROM xx x1,xx x2,xx x3,xx x4,xx x5,xx x6 ;
  WHERE x1.f1 # x2.f1 AND x2.f1 # x3.f1 AND x1.f1 # x3.f1;
  ORDER BY  1,2,3 ;
  INTO Cursor CrsPerm
 
BROWSE
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

7

Re: permütasyon serisi oluşturma

Not :
Sayı dizesi arttıkça WHERE tümceciği nin kontrolü zorlaşabilir :

Author: Cetin BASOZ

Visual Fox Pro
Create Cursor xx (f1 i)

For ix=1 To 4
  Insert Into xx Values (m.ix)
Endfor
 
Select Distinct ;
  x1.f1 As c1, ;
  x2.f1 As c2, ;
  x3.f1 As c3, ;
  x4.f1 As c4 ;
  FROM xx x1,xx x2,xx x3,xx x4 ;
  WHERE x1.f1 # x2.f1 AND x2.f1 # x3.f1 AND x1.f1 # x3.f1 AND x2.f1 # x4.f1 AND x1.f1 # x4.f1 AND x3.f1 # x4.f1 ;
  ORDER BY  1,2,3,4 ;
  INTO Cursor CrsPerm
 
BROWSE
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

8 Son düzenleyen, aydinufuk (16.08.2013 10:08:27)

Re: permütasyon serisi oluşturma

Cetin'in yine acayip kodlarından biri. 40 yıl düşünsem aklıma gelmez.