Отображение двух непрерывных отсортированных целочисленных наборов в один целочисленный набор - PullRequest
0 голосов
/ 13 октября 2010

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

например A: {1,2,3} B:{1,2,3,4} может отображаться на C: {1,2,3,4,5,6,7} по 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;

// Отображение элементов в A в сегменты в выходных данных C

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

1 Ответ

0 голосов
/ 13 октября 2010

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

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