Двоюродный племянник

Всех с новым годом и добро пожаловать в 2010 год, или, как предпочитает мой друг профессор Орбифолд (Orbifol), MMX год. Я надеюсь, ваши праздники были такими же веселыми и радостными, как и мои.

Выросшее семейство Липпертов продолжает расти. В этом году на ежегодное празднование Дня Подарков нам для ужина понадобились два переполненных стола, вместо одного, как было всегда. Старшие двоюродные сестры теперь все замужем, некоторые из них растят детей, а некоторые двоюродные братья и сестры помоложе, начали приходить со своими девушками и парнями. Хочу заметить, что самым младшим за столом был мой новый «двоюродный племянник», с которым завязалась долгая дискуссия о вычислении степени родства. Вот как бы работал такой общедоступный сервис.

Объяснение на основе рекурсии для программистов и математиков:

Базовый случай: Если X и Y «одноюродные» и относятся к одному и тому же поколению, значит X и Y – родные братья.

Рекурсивный случай 1: Если n > 1 и X и Y относятся к одному поколению, тогда X.Parent и Y.Parent являются (n-1)-юродными родственниками.

Рекурсивный случай 2: Если m > 0 и X и Y являются n-юродными родственниками и отличаются на m поколений, тогда без потери точности можно предположить, что X относится к более старшему поколению, чем Y. В этом случае X.Parent и Y являются n-юродными родственниками, различающимися на m – 1 поколение.

Объяснение для нормальных людей

Давайте рассмотрим двух разных людей, у которых есть общий предок, но которые не являются прямыми потомками один другого (т.е. не является матерью, отцом, бабушкой и т.д. другому):

Для определения степени родства (n-юродности) необходимо найти минимальное количество поколений, которое нужно пройти вверх по дереву, чтобы найти ближайшего общего предка.

Разница поколений – это модуль разницы между числом поколений, которое нужно пройти вверх по дереву для поиска ближайшего общего предка.

В качестве примера, давайте рассмотрим фрагмент генеалогического дерева:

Мэри
/       \
Лора Боб
|           |
Джон Элен
|            |
Ксеркс Мелинда

Давайте, в качестве примера, рассмотрим Элен и Ксеркс. Их ближайшим общим предком является Мэри. Для Элен нужно вернуться назад на два поколения, а для Ксеркс – на три. Минимальным значением чисел два и три является два. Модуль разницы между числами два и три – единица. Поэтому Элен и Ксеркс являются двоюродными тетей и племянницей, также как и Джон с Мелиндой (только в этом случае Джон является двоюродным дядей).

«Одноюродные» родственники с нулевой разницей поколений называются особым образом – родными братьями и сестрами. «Одноюродные» родственники с разницей поколений равной единице – это дядя и тети, племянники и племянницы. «Одноюродные» родственники с разницей поколений равной двум – это двоюродные дедушки, двоюродные бабушки, двоюродные внуки и двоюродные внучки.

Опишем это дерево:

Мэри – мама Лоры и Боба, бабушка Джона и Элен и прабабушка Ксеркс и Мелинды.

Лора – дочь Мэри, сестра Боба, мама Джона, тетя Элен, бабушка Ксеркс и двоюродная бабушка Мелинды.

Боб – сын Мэри, брат Лоры, дядя Джона, папа Элен, двоюродный дедушка Ксеркс и дедушка Мелинды.

Джон – внук Мэри, сын Лоры, племянник Боба, двоюродный брат Элен, отец Ксеркс и двоюродный дядя Мелинды.

Элен – внучка Мэри, племянница Лоры, дочь Боба, двоюродная сестра Джона, двоюродная тетя Ксеркс и мама Мелинды.

Ксеркс – правнук Мэри, внук Лоры, внучатый племянник боба, сын Джона, двоюродный племянник Элен и троюродный брат Мелинды.

Мелинда – прабабушка Мэри, внучатая племянница Лоры, внучка Боба, двоюродная племянница Джона, дочь Элен и троюродная сестра Ксеркс.

Конечно, все это достаточно просто. Скажем, если ваша мама умерла и ваш папа женился на ее сестре и у них будут еще дети, тогда определить родственные связи становится значительно сложнее. И только одному Богу известно, что будет, если ты будешь дедушкой самому себе.

Между прочим, в штате Вашингтон незаконно жениться на сестре своей вдовы. Не догадываетесь почему?

Оригинал статьи