15
ЗАЯВКИ ЗА НАМИРАНЕ НА ПЕРМУТАЦИИ , ВАРИАЦИИ И КОМБИНАЦИИ доц. д-р Цветанка Георгиева-Трифонова

Заявки за намиране на пермутации, вариации и комбинации

Embed Size (px)

Citation preview

ЗАЯВКИ ЗА НАМИРАНЕ НА ПЕРМУТАЦИИ,

ВАРИАЦИИ И КОМБИНАЦИИ

доц. д-р Цветанка Георгиева-Трифонова

ЗАЯВКИ ЗА НАМИРАНЕ НА ПЕРМУТАЦИИ, ВАРИАЦИИ

И КОМБИНАЦИИ

Задача. Да се напише заявка за намиране на:

а) всички пермутации без повторения на n елемента;

б) всички пермутации с повторения на n елемента;

в) всички вариации без повторения на k елемента над n-

елементно множество;

г) всички вариации с повторения на k елемента над n-

елементно множество;

д) всички комбинации без повторения на k елемента над

n-елементно множество;

е) всички комбинации с повторения на k елемента над n-

елементно множество.

22Цветанка Георгиева

ВЪВЕЖДАНЕ НА ЕЛЕМЕНТИТЕ

Нека е дадена таблица itemtable с една колона item:CREATE TABLE itemtable (item varchar(10));

-- въвеждане на елементите

DECLARE @n int;

SET @n=0;

WHILE @n < 6

BEGIN

SET @n = @n + 1;

INSERT INTO itemtable (item)

VALUES (@n);

END;

33Цветанка Георгиева

ПЕРМУТАЦИИ БЕЗ ПОВТОРЕНИЯ

WITH perm (item, level) при @n=3

AS

( SELECT CAST(item AS varchar(50)), 1

FROM itemtable

UNION ALL

SELECT CAST(perm.item + ',' + i.item

AS varchar(50)), level + 1

FROM itemtable i, perm

WHERE level < @n AND

CHARINDEX(i.item, perm.item) = 0 )

-- извеждане на пермутациите

SELECT item

FROM perm

WHERE level = @n

ORDER BY item;

44Цветанка Георгиева

ПЕРМУТАЦИИ БЕЗ ПОВТОРЕНИЯ (2)

Инициализиране, нека @n=3

SELECT CAST(item AS varchar(50)), 1

FROM itemtable

I.SELECT CAST(perm.item + ',' + i.item

AS varchar(50)), level + 1

FROM itemtable i, perm

WHERE level < @n AND

CHARINDEX(i.item, perm.item) = 0 )

Резултатът е празното множество.

55Цветанка Георгиева

ПЕРМУТАЦИИ БЕЗ ПОВТОРЕНИЯ (3)

II.

itemtable perm

×

SELECT CAST(perm.item + ',' + i.item

AS varchar(50)), level + 1

FROM itemtable i, perm

WHERE level < @n AND

CHARINDEX(i.item, perm.item) = 0 )

66Цветанка Георгиева

ПЕРМУТАЦИИ БЕЗ ПОВТОРЕНИЯ (4)

III.

itemtable perm

×

SELECT CAST(perm.item + ',' + i.item

AS varchar(50)), level + 1

FROM itemtable i, perm

WHERE level < @n AND

CHARINDEX(i.item, perm.item) = 0 )

77Цветанка Георгиева

ПЕРМУТАЦИИ БЕЗ ПОВТОРЕНИЯ (5)

IV.

itemtable perm

× Ø

SELECT CAST(perm.item + ',' + i.item

AS varchar(50)), level + 1

FROM itemtable i, perm

WHERE level < @n AND

CHARINDEX(i.item, perm.item) = 0 )

88Цветанка Георгиева

ПЕРМУТАЦИИ С ПОВТОРЕНИЯ

WITH perm (item, level)

AS

( SELECT CAST(item AS varchar(50)), 1

FROM itemtable

UNION ALL

SELECT CAST(perm.item + ',' + i.item

AS varchar(50)),

level + 1

FROM itemtable i, perm

WHERE level < @n

)

-- извеждане на пермутациите

SELECT item

FROM perm

WHERE level = @n

ORDER BY item;

99Цветанка Георгиева

ВАРИАЦИИ БЕЗ ПОВТОРЕНИЯ

DECLARE @k int;

SET @k=2;

-- вариации без повторения

WITH variations (item, level)

AS

( SELECT CAST(item AS varchar(50)), 1 FROM itemtable

UNION ALL

SELECT CAST(v.item + ',' + i.item AS varchar(50)),

level + 1

FROM itemtable i, variations v

WHERE level < @k AND CHARINDEX(i.item, v.item) = 0

)

-- извеждане на вариациите

SELECT item FROM variations

WHERE level=@k

ORDER BY item;

1010Цветанка Георгиева

ВАРИАЦИИ С ПОВТОРЕНИЯ

DECLARE @k int;

SET @k=2;

-- вариации с повторения

WITH variations (item, level)

AS

( SELECT CAST(item AS varchar(50)), 1

FROM itemtable

UNION ALL

SELECT CAST(v.item + ',' + i.item AS varchar(50)),

level + 1

FROM itemtable i, variations v

WHERE level < @k

)

-- извеждане на вариациите

SELECT item FROM variations

WHERE level=@k

ORDER BY item;1111Цветанка Георгиева

КОМБИНАЦИИ БЕЗ ПОВТОРЕНИЯ

DECLARE @k int;

SET @k = 2;

-- комбинации без повторения

WITH comb (item, level) AS

( SELECT CAST(item AS varchar(50)), 1 FROM itemtable

UNION ALL

SELECT CAST(comb.item + ',' + i.item

AS varchar(50)),

level + 1

FROM itemtable i, comb

WHERE level < @k AND i.item>RIGHT(comb.item, 1)

)

-- извеждане на комбинациите

SELECT item FROM comb

WHERE level=@k

ORDER BY item;

1212Цветанка Георгиева

КОМБИНАЦИИ С ПОВТОРЕНИЯ

DECLARE @k int;

SET @k = 2;

-- комбинации с повторения

WITH comb (item, level) AS

( SELECT CAST(item AS varchar(50)), 1 FROM itemtable

UNION ALL

SELECT CAST(comb.item +','+ i.item AS varchar(50)),

level + 1

FROM itemtable i, comb

WHERE level < @k AND i.item>=RIGHT(comb.item, 1)

)

-- извеждане на комбинациите

SELECT item FROM comb

WHERE level=@k

ORDER BY item;

1313Цветанка Георгиева

ЗАЯВКИ ЗА НАМИРАНЕ НА ПЕРМУТАЦИИ, ВАРИАЦИИ

И КОМБИНАЦИИ

Ако n е двуцифрено число:

елементите се въвеждат, като се добавя 0 пред

едноцифрните елементи;

в този случай за комбинациите се използва

RIGHT(comb.item, 2).

Аналогично за трицифрени и т.н. числа.

1414Цветанка Георгиева

1515Цветанка Георгиева

Цветанка Георгиева-Трифонова, 2017

Някои права запазени.

Презентацията е достъпна под лиценз Creative Commons,

Признание-Некомерсиално-Без производни,

https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode