Мой учитель задает алгоритм, который найдет все комбинации. У меня есть набор данных, и длина может быть переменной. Поэтому комбинации должны быть такими:Найти все комбинации
a
b
c
aa
ab
ac
...
ccbc
ccca
cccb
cccc
Они будут храниться в таблице «слово», содержащей одно поле varchar. Я сделал это с петлей, потому что я не люблю рекурсивность и JT имеет лучшую производительность:
DROP PROCEDURE combi;
CREATE PROCEDURE combi
AS
BEGIN
DELETE FROM word
DECLARE @i BIGINT
DECLARE @j INT
DECLARE @word NVARCHAR(24)
DECLARE @str NVARCHAR(62)
DECLARE @combinations BIGINT
DECLARE @currentlength TINYINT
DECLARE @maxcurrentlength TINYINT
SET @maxcurrentlength=4
SET @str='azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN' -- length=62
SET @currentlength=1
-- loop on the length of the text
WHILE @currentlength<[email protected] BEGIN
SET @combinations=POWER(62,@currentlength)
SET @i=0
-- get all combinations
WHILE i<@combinations BEGIN
SET @word=''
SET @j=0
-- generate word
WHILE @j<@currentlength BEGIN
SET @[email protected]+SUBSTRING(@str, (FLOOR(@i/POWER(62,@[email protected])) % 62) +1, 1)
SET @[email protected]+1
END
INSERT INTO word VALUES (@word)
SET @[email protected]+1
END
SET @[email protected]+1
END
END;
EXEC combi;
Проблема заключается в том, когда я использую длину 8, мои сбои сервера: кажется, что POWER(62,@[email protected])
проблема.
Вы пробовали какой-либо ответ? – Horaciux
Я тестирую ответ ssnobody на длину 8 ... Мой компьютер в настоящее время работает с субботы – Athanor
Это огромное количество комбинаций. – Horaciux