Автор: Пользователь скрыл имя, 02 Марта 2013 в 19:41, дипломная работа
Целью выпускной работы является разработка алгоритмического подхода к изучению элементов комбинаторики методов их перебора.
Задачи исследования:
1) изучить литературу по теме выпускной работы;
2) провести сравнительный анализ элементов комбинаторики и правил их построения, описания алгоритмов перебора сочетаний, перестановок и размещений;
3) описать методику решения численных задач дискретного анализа;
4) подготовить рекомендации по усовершенствованию логики изложения некоторых вопросов комбинаторики.
Введение
1. Комбинаторные задачи в школьном курсе математики 9
1.1. Сочетание по m элементов из n 9
1.2. Перестановки из элементов n 11
1.3. Размещение m элементов по n позициям 14
2. Алгоритмы перебора 18
2.1. Перебор сочетаний, перестановки, размещения. 18
3. Большие числа 25
3.1. Упаковка натурального числа в виде массива 25
3.2. Сравнение больших чисел 29
3.3. Сложение и вычитание двух больших чисел 36
4. Комбинаторные алгоритмы. Сочетание 40
4.1. Генерация сочетания по его номеру 40
4.2. Сочетания с повторениями 47
5. Комбинаторные алгоритмы. Перестановки 50
5.1. Число перестановок из n элементов 50
5.2 Определение номера перестановки. Определение перестановки по номеру 52
5.3. Перестановки с повторениями 54
6. Множества и алгоритмы перебора 56
6.1. Подмножество. Перечисление подмножеств 56
6.2. Нумерация подмножеств 59
6.3. Скобочные последовательности и их нумерация 64
ЗАКЛЮЧЕНИЕ 70
ЛИТЕРАТУРА 72
псевдокод:
check(s):
pointer = 0
for (i = 1; i <= length(s); i++):
pointer = (s[i] == '(')? pointer++ : pointer--
if (pointer < 0)
return false
if (pointer == 0)
return true
else
return false
Надо отметить, что скобочные последовательности могут состоять не только из одного типа скобок. При этом недопустимо такое расположение, когда один тип скобок закрывает другой:
Примеры скобочных
последовательностей с
В этом случае для проверки надо будет использовать стек.
Лексикографический порядок правильных скобочных последовательностей.
Для того чтобы определить лексикографический порядок для правильных скобочных последовательностей надо установить порядок на алфавите, например так ' ' < ' '. Для последовательностей с разным типом скобок надо определять свой порядок в зависимости от числа скобок, причем любая открывающаяся скобка должна быть меньше закрывающейся, например " " < " " < " " < " ".
Примеры лексикографического порядка для и , где — число открывающихся скобок, а — число видов скобок
|
| |||
|
|
|
|
|
|
| ||
|
|
|
|
Алгоритм генерации
лексикографического порядка
Определение: |
Числа Каталана — последовательность чисел, выражающих:
|
Для чисел Каталана выполняется выражение:
,
а также они удовлетворяют рекуррентному соотношению:
— так как существует только одна скобочная последовательность с открывающихся скобок — пустая
.
Чтобы получить это соотношение, надо перебрать все возможные последовательности и , являющиеся правильными скобочными последовательностями, такие, что образуют новые правильные скобочные последовательности необходимой нам длины.
Алгоритмы генерации
Генерация следующей скобочной последовательности:
Пусть нам известна строка , представляющая собой правильную скобочную последовательность. Нам необходимо вывести следующую скобочную последовательность, а если ее нет, то — "No solution". Чтобы получить следующую скобочную последовательность надо найти последнюю открывающуюся скобку, которую можно заменить , заменить ее на закрывающуюся, а оставшиеся в конце скобки (если они есть) заменить на минимально возможную последовательность скобок:
next(s):
pointer_close = 0
pointer_open = 0
for (i = length(s); i > 0; i--)
if (s[i] == '('):
pointer_open++
if (pointer_close > pointer_open)
break
else
pointer_close++
delete(s, length(s) - pointer_open - pointer_close + 1, pointer_close + l)
if (s == ""):
return false
s = s +')'
for (j = 1; j <= pointer_open; j++):
s = s + '('
for (j = 1; j < pointer_close; j++):
s = s + ')'
return true
Если эта функция после выполнения выводит , тогда надо напечатать полученную строку , если , то следует вывести "No solution".
Получение лексикографического порядка:
Пусть нам известно число . Надо вывести все правильные скобочные последовательности в лексикографическом порядке с открывающимися скобками:
order (n)
s = "";
if (n == 0):
result(s)
else
for (j = 1; j <= n; i++)
s = s + '(';
for (j = 1; j <= n; i++)
s = s + ')';
result(s);
t = next(s);
while (t <> false)
result(s);
t = next(s);
return
Так же с помощью этого алгоритма можно получить скобочную последовательность по номеру и номер по скобочной последовательности, добавив сравнение с нужной последовательностью и счетчик. Но это далеко не самый оптимальный алгоритм для подобного типа задач и он не будет нормально работать для больших .
Данная тема исследования актуальна для учащихся образовательных учреждений в связи с тем, что современные школьники стали более развиты и им требуются не просто задачи на вычисление, а задачи, требующие в своем решении участия логического мышления, а также задачи, наиболее приближенные к жизненным ситуациям. Такими задачами и являются задачи на комбинаторику.
Исследуя тему «Комбинаторные алгоритмы решения школьных задач по информатике» проанализировали научно-методическую литературу, выявили уровень логического мышления основной школы. Так же изучили психологические особенности, изучили методику ознакомления с задачами на комбинаторику.
Цель исследования выполнена - разработан алгоритмический подход к изучению элементов комбинаторики методов их перебора.
Гипотеза, положенная в основу исследования подтверждается – качество подготовки выпускников к сдаче ЕГЭ улучшилось при составлении типологии заданий по информатике, и определена логика их изучения в школьном курсе информатики; осуществлен отбор алгоритмов решения задач дискретного анализа с обоснованием их корректности.
В дипломной работе рассматриваются элементы комбинаторики: сочетание, перестановки, размещение, перебор элементов заданного множества и разбиение заданного множества на подмножества.
Для сочетания, перестановки и размещения сформулированы и решены четыре классические задачи. Для перестановок они таковы.
Дипломная работа представляет интерес, во-первых, для учителей и учащихся школ с углубленным изучением информатики. Во-вторых, для студентов высших учебных заведений, изучающих программирование и стремящихся достичь профессионального уровня.
Информация о работе Комбинаторные алгоритмы решения школьных задач по информатике