2010-10-12 5 views
0

Я пытаюсь сопоставить два непрерывных отсортированных целочисленных набора (с потенциально различным количеством элементов) в один непрерывный сортированный целочисленный набор, сохраняющий линейный интервал.Отображение двух непрерывных отсортированных целых наборов на один набор целых чисел

например. A: {1,2,3} B: {1,2,3,4} может отображаться на C: {1,2,3,4,5,6,7} by A: { 1-> 1, 2-> 4, 3-> 7} и B: {1-> 1, 2-> 3, 3-> 5, 4-> 7}

Это все, что нужно сделать но у меня возникли проблемы с обобщением.

Декомпозиция проблемы, мне нужно найти (1) количество ковшей на выходе набора и (2) вход -> выход отображение

Мое решение, предоставляемое здесь:

// Есть LCM (| A | -1, | B | -1) +1 ковши на выходе C

int numBuckets = LCM ( A.Count() - 1, B.Count() - 1) + 1 ;

элементов // Карта в А до ведра в выходе C

для (INT I = 0; я < A.Count(); я ++) {
mapping.Add (A.ElementAt (I), (i * ((numBuckets - 1)/(A.Count() - 1))). ToString()); }

+0

Что является входом, а что является результатом алгоритма, требующего? – Dialecticus

+0

Я не понимаю вопроса. Ваше отображение не является инъективным, так как 3 в A отображает 7 в C, а также 4 в B. Это не сюръективно, так как ничего не отображается в 2. Предположительно, что-то не так с отображением A: {1-> 1, 2 -> 2, 3-> 3} и B: {1-> 1, 2-> 2, 3-> 3, 4-> 4}, но что? Если это разрешено, это легко обобщить :-) –

+0

О, если вы имеете в виду, что концы диапазонов должны сопоставляться контурам C, тогда C имеет специальное свойство, что длина (C) -1 делится на обе длины (A) -1 и length (B) -1. Если бы это было не так, вы не могли этого сделать. –

ответ

0

Предположим, размер C: | C | = Nc и для набора A, | A | = Na. Затем, если вы хотите отобразить к C, пусть первые элементы карты друг с другом, а затем пропустить элементы по

floor((Nc-1)/(Na-1))