Форум программистов, компьютерный форум CyberForum.ru

Покрытие множеств - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ книга http://www.cyberforum.ru/cpp-beginners/thread87470.html
какие книги вы посоветуете для быстрого изучения языка си???
C++ Перевести число из десятичной в двоичную 1. Составить программу согласно заданию. 2. Протестировать программу одним из известных методов тестирования (Black Box або White Box) Примітка: 1.Данные вводяться с клавы. 2.Указывать результат роботи программи. Завдання: http://www.cyberforum.ru/cpp-beginners/thread87433.html
C++ Статистика:Метод наименьших квадратов
Вот такая задача мне попалась недавно на с++... Во время исследований получили экспериментальную зависимость вяскости глицерина в сантипуазах и температуры в градусах Цельсия: температура --- вяскость -42 ----- 6.71*10^6 -20 ----- 1.34*10^5 0 ------ 1.21*10^4 20 ----- 1.49*10^3 30 ----- 6.26*10^2 Методом...
Работа с файломи C++
Здравствуйте. Нужна программа которая бы делала следующее. У нас есть неопределенное количество файлов. Пользователь с помощью стандартного ввода пишет путь к файлу и производиться считывание строки из файла. Строкой внутри этого файла является путь к следующему файлу. После считывания строки производим такую же операцию, только пользователь уже ничего не вводит, а путь к файлу копируется из...
C++ Вектор и итераторы http://www.cyberforum.ru/cpp-beginners/thread87418.html
Всем привет. Помогите дописать курсовую. Нодо сделать вывод студентов с вектора + сортировку объектов в векторе по любому значению. Вот что у меня получилось: /////////////////////////////////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include <fstream> #include <iostream> #include <conio.h> #include <vector> #include <stdio.h>...
C++ написать функцию, возвращающую массив Всем здравствуйте, Вопрос такой: нужно написать функцию, которая возвращает массив из двух чисел, и я не хочу использовать std::pair. Следующий вариант работает вроде: int* return_array(){ int arr; arr = 0; подробнее

Показать сообщение отдельно
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
23.01.2010, 12:07     Покрытие множеств
как?)
printf("%..%...\n", сомнительные переменные);
В тех местах, где есть подозрения...

Добавлено через 8 часов 53 минуты
Все конечно, не очень хорошо.
Очень много повторов, и это естесственно для этого алгоритма.
Как их убрать?
Первое, что приходит в голову - запоминать сделанные покрытия и сравнивать, не перекрывает ли
текущее X его.
(Критерий того, что B есть подмножество множества A : ((A^B)^A)==0 )
Но это требует неизвестно сколько памяти...
Наверное, есть другой способ, через рекурсию, дайте немного подумать...

Добавлено через 21 минуту
Ошибся в критерии
Надо
( ((A^B) & (|A)) == 0)
^ - исключающее ИЛИ
|A - НЕ A

Добавлено через 1 час 42 минуты
Удалось таки сделать приличную прогу.
И без повторов и с отбрасыванием ненужного
Код
#include <stdio.h>
#include <string.h>

static double a[7]={ 1, 3, 2, 2, 1, 2, 3 }; //vesa
static long  A[7] = { 0xA2, 0x14A, 0x33, 0x124, 0x51, 0xD, 0xB5 };
static long U;
static int N = 7;  // kol-vo podmnogestv
static int n = 9;  // kol-vo elementov polnogo mnogestva

void main()
{ int i;
  U = 0; // Togda polnoe mnojestvo delaetsya tak:
  for(i=0; i<n;i++ )   U |= (1L<<i);
//  printf ("U = %lx\n", U); // DEB
  Pokr(0, 0L, 0L);
}
/*****************/
// Y - pokrito  P - who ispol'zovan J - s kakovo nachinat'
Pokr(int J, long Y, long P)
{ long Q, Z; int i, j; double s;

   for(i=J; i<N; i++) {
     if (((Y^A[i]) & (Y^U))==0) continue; // A[i] nichego ne dobavit
     Z = (Y|A[i]);
     Q = (P|(1L<<i));
     if (Z==U) {
        // printf("Z=%lx i=%d\n", Z, i); // DEB
        s = 0;
        for (j=0; j<N; j++) { // Pechat' naydennogo pokrytiya i ego ceny
          if ( (Q & (1L<<j))!=0 ) {
            printf("%c ", 'A'+j);
            s += a[j];
          }
        }
        printf("s=%f\n", s);
        continue;
     }
     Pokr(i+1, Z, Q); // Recursia!
   }
}
/*****************/
Вот такой результат
Код
A B C D s=8.000000
A B C F s=8.000000
A B C G s=9.000000
A B D E s=7.000000
A B D F G s=11.000000
A B D G s=9.000000
A B E F s=7.000000
A B E G s=8.000000
A B F G s=9.000000
A B G s=7.000000
A C D E F s=8.000000
A D E F s=6.000000
B C D G s=10.000000
B C F G s=10.000000
B C G s=8.000000
B D E G s=9.000000
B D F G s=10.000000
B D G s=8.000000
B E F G s=9.000000
B E G s=7.000000
B F G s=8.000000
B G s=6.000000
C D E F G s=10.000000
 
Текущее время: 06:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru