Forum www.zinfa.fora.pl Strona Główna
FAQ Szukaj Użytkownicy Grupy Profil Zaloguj się, by sprawdzić wiadomości
Forum www.zinfa.fora.pl Strona Główna  Zaloguj  Rejestracja
algorytmy kombinatoryczne
Idź do strony 1, 2, 3  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum www.zinfa.fora.pl Strona Główna -> Rok IV / Opracowania, pomoce IV
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
zbychup




Dołączył: 17 Paź 2010
Posty: 130
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 11:17, 17 Kwi 2011    Temat postu: algorytmy kombinatoryczne

tu proponuje wrzucac podczas zajęć rozwiązania...

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
armo




Dołączył: 14 Paź 2010
Posty: 40
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 11:32, 17 Kwi 2011    Temat postu: Zadanie 1 wszystkie ciąg k-elementowe z liczb 1..n

Zadanie 1

Kod:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package zwspui1zad1ciagikzliczbn;

import java.util.Arrays;

/**
 *
 * @author amanko
 */
public class CiagiKZliczbN {

    /**
     * @param args the command line arguments
     *    1. Wygenerować wszystkie ciągi długości k zbudowane z liczb 1,2,...,n
//      sposób leksykograficzny
//
//      dla n=4, k=3
//      1,1,1
//      1,1,2
//      1,1,3
//      1,1,4
//      1,2,1
//      ....
//      (4,4,4)
//
//      X[1..k]
//
//      ciągi drukujemy a nie zpamiętujemy
//
//      ZAD OPISAĆ SŁOWAMI
//         krok początkowy, wypelniamy ciag k elementowy wartosciami 1
//         powtarzamy
//            uwzględniając elementy ciągu od końca sprawdzamy czy elementy mają wartość n
//               wtedy zmieniamy ich wartość na 1
//               nastepnie kontynuujemy sprawdzanie poprzednich elementow ciagu i jesli maja wartosc n to tez zaminemay na 1 i przechodzimy do poprzedniego
//               jesli wyjdziemy poza zakres to opuszczamy petle
//            jesli wyszlismy poza zakres to znaczy ze mamy osttani element i nie mozemy zwiekszyc wiec zwracamy null jako straznik konca szeregu ciagow
//            jesli jestesmy w zakresie to zwiekszamy znaleziony mniejszy niz n element ciagu o 1 i konczymy zwiekszanie
//
//      ZAD ZAPISAC KROKI W PSEUDOKODZIE
//         ciag <- generujPierwszy(K,N)
//         repeat
//            drukuj(ciag)
//            ciag <- zwieksz(ciag)
//         until ciag<>null
//
//      generujPierwszy(K,N)
//         for i <- 1 to k
//            ciag[i] <- 1
//         return ciag
//
//      zwieksz(ciag[])
//         indeksDoZwiekszenia = k //// ciag.length-1
//         while (indeksDoZwiekszenia>=1) and (ciag[indeksDoZwiekszenia]==n)
//            ciag[indeksDoZwiekszenia] <- 1
//            indeksDoZwiekszenia <- indeksDoZwiekszenia -1
//         if (indeksDoZwiekszenia<1)
//            then
//               return null;
//            else
//               ciag[indeksDoZwiekszenia] <- ciag[indeksDoZwiekszenia] + 1
//               return ciag
//
//
//
//      ZAD ZAIMPLEMENTOWAĆ
//

     */
    public static void main(String[] args) {
        int k = 6; // długośc ciągów
        int n = 3; // maksymalna wartość elementu ciągu
        int ciag[] = new int[k]; // kolejny ciąg do drukowania
        int iW; // indeks w ciągu poszukiwany do zwiększenia wartości
       
        Arrays.fill(ciag, 1);

        do{
            System.out.println(Arrays.toString(ciag));
            iW = k-1;
            while( (iW>=0) && (ciag[iW]==n) ){
                ciag[iW]=1;
                iW--;
            }
            if(iW>=0)
                ciag[iW]++;
        }while(iW>=0);
       
    }

}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
armo




Dołączył: 14 Paź 2010
Posty: 40
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 11:33, 17 Kwi 2011    Temat postu: Zad 2 rank dla wszystkich podzbiorów

Kod:

package zwspui1zad2rankdlawszystkiepodzbiory;

import java.text.ParseException;
import java.util.Arrays;

/**
 *
 * @author amanko
 */
public class RankDlaWszystkiePodzbiory {

    /**
     * dany jest zbiór bazowy S={1,2...n}
//dla zadanego podzbioru tego zbioru (zadany elementami)
//wyznaczyc jego rangę
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // Dane wejscowe
        //int n = 6 ; // liczba elementów zbioru bazowego
        //int podzbior[] = {2,4,6} ; // podzbiór dla kterog wyliczymy rank

        int n = 0;
        int podzbior[] = null;

        try{
            if(args.length<2){
                System.err.println("Zbyt malo argumentow");
                System.exit(1);
            }
            n = Integer.parseInt(args[0]);
            if(args.length!=n+1){
                System.err.println("Argumentow powinno byc " + (n+1) + "bo pierwszy argument to " + n);
                System.exit(1);
            }
            podzbior = new int[args.length-1];
            for(int i=1;i<args.length;i++)
                podzbior[i-1]= Integer.parseInt(args[i]);
        }catch(NumberFormatException e){
            System.err.println("ktorys z argumentow nie jest liczba całkowita");
            System.exit(1);

        }
        //Arrays.sort(podzbior);
        int rank=0;

        for(int i=0;i<podzbior.length;i++){
            rank += 1<<(n-podzbior[i]); // 2^(n-podzbior[i])
            // ograniczenie: dziala dla n<31
        }

        System.out.println(rank);

    }

}



Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
armo




Dołączył: 14 Paź 2010
Posty: 40
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 11:34, 17 Kwi 2011    Temat postu: Zad3 unrank

Kod:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package zwspui1zad3unrankdlawszystkiepodzbiory;

import java.util.Arrays;

/**
 *
 * @author amanko
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println(
            Arrays.toString(
                unrank(
                    Integer.parseInt(args[0]),
                    Integer.parseInt(args[1]))));
    }

    public static int[] unrank(int n,int r){
        int tmpTab[] = new int[n];
        Arrays.fill(tmpTab, 0);
        int ileElementow = 0 ;
        while(r>0){
            if( (r % 2) == 1){
                tmpTab[ileElementow]=n;
                ileElementow++;
            }
            n--;
            r/=2;
        }
        int[] wynik = Arrays.copyOf(tmpTab, ileElementow);
        Arrays.sort(wynik);
        return wynik;
    }
   
}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
alzrchos




Dołączył: 09 Gru 2007
Posty: 7
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5

PostWysłany: Nie 11:38, 17 Kwi 2011    Temat postu:

Zad. 1
Kod:

import sys

if len(sys.argv) > 2:
   k = int(sys.argv[1])
   n = int(sys.argv[2])
else:
   raise Exception('Brak wymaganych argumentów k i n')


def seq_kn(k, n):
   x = [1] * k
   while True:
      yield x
      i = k-1
      while i >= 0:
         if x[i] < n:
            x[i] = x[i] + 1
            break
         else:
            if i == 0:
               return
            else:
               for j in range(i, k):
                  x[j] = 1
         i = i-1


for element in seq_kn(k, n):
   print element


Zad. 2
Kod:

import sys


if len(sys.argv) > 1:
        if not sys.argv[1].isdigit():
                raise Exception('Każdy argument musi być liczbą całkowitą')
   n = int(sys.argv[1])
   T = set([])
   for i in range(2, len(sys.argv)):
      if not sys.argv[i].isdigit():
         raise Exception('Każdy argument musi być liczbą całkowitą')
      a = int(sys.argv[i])
      if a > n:
         raise Exception('Wartość elementu zbioru przekracza n')
      if a in T:
         raise Exception('Podane elementy zbioru powtarzają się')
      T.add(a)
else:
   raise Exception('Brak wymaganego argumentu n')



def rank(T):
   rank = 0
   for a in T:
      rank = rank + 2**(n-a)
   return rank


print rank(T)


Zad. 3
Kod:

import sys

if len(sys.argv) > 2:
   if not sys.argv[1].isdigit() or not sys.argv[2].isdigit():
      raise Exception('Argumenty muszą być liczbami całkowitymi')
   n = int(sys.argv[1])
   r = int(sys.argv[2])
   max_rank = 0
   for a in range(n):
      max_rank = max_rank + 2**(n-a)
   if (r > max_rank):
      raise Exception('Podana ranga jest zbyt duża')
else:
   raise Exception('Brak wymaganych argumentów n i r')


def unrank(n, r):
   T = set([])
   for i in range(n, 0, -1):
      if r % 2 == 1:
         T.add(i)
      r = r // 2
   return T


print unrank(n, r)


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
zbychup




Dołączył: 17 Paź 2010
Posty: 130
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 10:10, 15 Maj 2011    Temat postu:

ktos ma z dzisiaj pierwsze zadanko?

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
szakal




Dołączył: 21 Lis 2007
Posty: 207
Przeczytał: 0 tematów

Pomógł: 17 razy
Ostrzeżeń: 0/5

PostWysłany: Nie 10:19, 15 Maj 2011    Temat postu:

zbychup napisał:
ktos ma z dzisiaj pierwsze zadanko?


podaj treść, może coś wymyślę


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
emil_seba




Dołączył: 22 Lis 2007
Posty: 109
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 10:24, 15 Maj 2011    Temat postu:

wygeneruj podzbiór według kodu greya z wagami hamiltona

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
zbychup




Dołączył: 17 Paź 2010
Posty: 130
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 10:28, 15 Maj 2011    Temat postu:

listę podzbiorów

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
szakal




Dołączył: 21 Lis 2007
Posty: 207
Przeczytał: 0 tematów

Pomógł: 17 razy
Ostrzeżeń: 0/5

PostWysłany: Nie 10:39, 15 Maj 2011    Temat postu:

emil_seba napisał:
wygeneruj podzbiór według kodu greya z wagami hamiltona


Michał mówi, że w zeszycie ma tylko coś o wagach Hamminga...


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
emil_seba




Dołączył: 22 Lis 2007
Posty: 109
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 10:48, 15 Maj 2011    Temat postu:

dostalem tak w meilu od Oli Razz

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
armo




Dołączył: 14 Paź 2010
Posty: 40
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 11:25, 15 Maj 2011    Temat postu:

Kod:
package zad4nastepnikwkodziegraya;

/**
 *
 * @author s370650
 */
public class GenerowanieNastepnika {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        try{
            int n = Integer.parseInt(args[0]);
            // pierwszy kod graya - same zera
            int kodGrayaInt[] = new int[n];
            while(kodGrayaInt!=null){ // warunek konca - zrealizowany w podfunkcji
                System.out.print('{'); // obsluga drukowania
                boolean pierwszy = true;
                for(int i=0; i<n; i++)
                    if(kodGrayaInt[i]==1){
                        if(!pierwszy)
                            System.out.print(',');
                        System.out.print(i+1);
                        pierwszy = false;
                    }
                System.out.println('}');
                kodGrayaInt = nastepny(kodGrayaInt);
            }
        } catch (IndexOutOfBoundsException e){ // w razie błedów z interpretacją liczby elementów podanych jako argument
            System.err.println("Powinny być jeden argument - liczba elementów zbioru na podstawie ktorego generujemy podzbiory");
        }catch(NumberFormatException e){ // w razie błedów z interpretacją liczby elementów podanych jako argument
            System.err.println("Powinny być jeden argument - liczba elementów zbioru na podstawie ktorego generujemy podzbiory");
        }
    }

    static int[] nastepny(int[] kodGraya){
        int n = kodGraya.length; // dlugosc zbioru wejsciowego
        int kodH = 0 ; // kod Hamminga
        for(int i=0;i<n;i++){
            kodH +=kodGraya[i]; // zliczanie jedynek
        }
        if(kodH % 2 == 0){
            kodGraya[n-1] = 1 - kodGraya[n-1]; // zamiana ostatniego elementu
        } else {
            // szukamy piewrszej jedynki z prawej
            int i;
            for(i=n-1; kodGraya[i]==0;i--)
                ;
            // jesli nie znalezlismy jedynke na pierwszy miejscu to mamy kod 100000... jest to ostatni kod greya
            if(i==0){
                // realizujemy warunek stopu
                return null;
            } else {
                // zamieniamy bit na lewo od znalezionej pierwszej jedynki z prawej
                kodGraya[i-1] = 1 - kodGraya[i-1];
            }
        }
        return kodGraya;
    }

}


Post został pochwalony 0 razy

Ostatnio zmieniony przez armo dnia Nie 11:25, 15 Maj 2011, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Autor Wiadomość
zbychup




Dołączył: 17 Paź 2010
Posty: 130
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 11:50, 15 Maj 2011    Temat postu:

Dziękujemy Dobry Człowieku :]
Jakbys ranka wrzucił tez byłoby super Smile


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
zbychup




Dołączył: 17 Paź 2010
Posty: 130
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 10:12, 22 Maj 2011    Temat postu:

wygenerować w porządku leksykograficznym k-elementowe podzbiory zbioru {1,2,..n}.

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
zbychup




Dołączył: 17 Paź 2010
Posty: 130
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Nie 10:13, 22 Maj 2011    Temat postu:

wygenerowac wszystkie ciagi dlugosci k zbudowane z liczb naturalnych, w ktorych i-ty wyraz jest =< i dla wszystkich i=1,2,..., k

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.zinfa.fora.pl Strona Główna -> Rok IV / Opracowania, pomoce IV Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2, 3  Następny
Strona 1 z 3

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
BBTech Template by © 2003-04 MDesign
Regulamin