Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2013, 14:34   #1
Mirazhana
 
Регистрация: 04.10.2012
Сообщений: 4
Восклицание Пересечение множеств

Помогите с программой на С++, у самой никак не получается. Даны значения двух целочисленных массивов x и y размером n. Рассматривая массивы как конечные множество целых чисел, построить массив z размером не более 2n, где z = x пересекает y.
Нашла подобную программу но там z = x Δ y (симментрическая разность)
Вложения
Тип файла: txt 123.txt (1.5 Кб, 116 просмотров)
Mirazhana вне форума Ответить с цитированием
Старый 04.01.2013, 15:31   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Вроде одной функцией из <algorithm> решается.
Только перед этим массивы x & y отсортировать.

http://www.cplusplus.com/reference/a..._intersection/
EUGY вне форума Ответить с цитированием
Старый 06.01.2013, 11:54   #3
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Только перед этим массивы x & y отсортировать.
ничего сортировать не надо при операции пересеч., объед., вычит. и т.п. (не знаю сколько их). Алгоритм должен итак работать.
Murashov вне форума Ответить с цитированием
Старый 06.01.2013, 12:06   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Алгоритм должен итак работать.
Ой ли?
Код:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {
  int first[] = {5,10,15,20,25};
  int second[] = {50,40,30,20,10};
  vector<int> v(10);                        
  //sort (first,first+5);     //  5 10 15 20 25
 // sort (second,second+5);   // 10 20 30 40 50

  set_intersection (first, first+5, second, second+5, v.begin());
  for (int i = v.size(); i--;)
	  std::cout <<  v[i] << std::endl;

  return 0;
}
Цитата:
function template std::set_intersection
Intersection of two sorted ranges
Constructs a sorted range beginning in the location pointed by result with the set intersection of the two sorted ranges [first1,last1) and [first2,last2) as content.
EUGY вне форума Ответить с цитированием
Старый 06.01.2013, 18:08   #5
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

ой ли? :D

откуда вообще эта функция? вернее описание просто
Murashov вне форума Ответить с цитированием
Старый 06.01.2013, 22:21   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от Murashov Посмотреть сообщение
откуда вообще эта функция? вернее описание просто
Тебе стандарт языка процитировать?
На сортированных множествах алгоритм отрабатывает за o(n), на несортированных было бы o(n^2). Потому в stl включили более оптимальную версию.
Son Of Pain вне форума Ответить с цитированием
Старый 07.01.2013, 18:31   #7
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

язык чего? при чём тут конкретный язык программирования? множества - математика же.. в теории нужна ли сортировка вообще? блин я уже не уверен) нифига не помню
Murashov вне форума Ответить с цитированием
Старый 07.01.2013, 19:25   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
язык чего? при чём тут конкретный язык программирования? множества - математика же.. в теории нужна ли сортировка вообще? блин я уже не уверен) нифига не помню
В теории сортировка не нужна.
И конечно, можно написать алгоритм пересечения не сортированных массивов.
Но предполагается, что мы здесь в ветке языка с++, у которого есть библиотека STL. Она стала стандартом (де-факто). В нее, в частности, включена функция set_intersection, имеющая документированное описание, из которого следует, что работает она с отсортированными массивами.
EUGY вне форума Ответить с цитированием
Старый 07.01.2013, 21:50   #9
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
В теории сортировка не нужна.
И конечно, можно написать алгоритм пересечения не сортированных массивов.
Но предполагается, что мы здесь в ветке языка с++, у которого есть библиотека STL. Она стала стандартом (де-факто). В нее, в частности, включена функция set_intersection, имеющая документированное описание, из которого следует, что работает она с отсортированными массивами.
во, теперь понятно, спасибо.

ответ-то всё равно один будет.. как ни крути. а отсортировать всегда можно успеть
Murashov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пересечение множеств iNsomNia7 Паскаль, Turbo Pascal, PascalABC.NET 1 19.11.2012 14:38
Пересечение множеств, паскаль Bellatryx Паскаль, Turbo Pascal, PascalABC.NET 2 16.04.2012 09:44
Пересечение множеств. С++ Демик Помощь студентам 4 13.03.2011 18:04
Пролог!!!!!" Пересечение множеств giga1989 Помощь студентам 0 28.04.2010 21:27
пересечение двух множеств Олежек Фриланс 7 10.03.2010 18:46