Главная страница
Навигация по странице:

  • Отчет по лабораторной работе № 1 по дисциплине «Структуры и алгоритмы обработки данных»на тему: «Методы сортировки»Вариант 11

  • 1 Цель работы Изучить основы синтаксиса Python. Изучить различные методы сортировки массивов.2 Задание

  • Задание №1 Создать программу, которая выводит в консоль фразу «Hello, world!».Задание №2

  • Задание №4 Создать публичный репозиторий на github, и запушить выполненное задание.3 Ход работы 3.1. Ход работы над заданием №1

  • 3.2. Ход работы над заданием №2 3.2.1 Код программы

  • 3.2.2 Результат работы программы

  • 3.3. Ход работы над заданием №3 3.3.1 Описание программы

  • 3.3.2 Код программы

  • 3.3.2 Результат работы программы

  • 3.2. Ход работы над заданием №4 3.2.1 Ссылка не репозиторий

  • методы поиска. ЛАБА1. Отчет по лабораторной работе 1 по дисциплине Структуры и алгоритмы обработки данных


    Скачать 210.49 Kb.
    НазваниеОтчет по лабораторной работе 1 по дисциплине Структуры и алгоритмы обработки данных
    Анкорметоды поиска
    Дата24.11.2022
    Размер210.49 Kb.
    Формат файлаdocx
    Имя файлаЛАБА1.docx
    ТипОтчет
    #811019

    Министерство цифрового развития и массовых коммуникаций

    Российской Федерации

    Ордена Трудового Красного Знамени федеральное государственное

    бюджетное образовательное учреждение

    высшего образования

    «Московский технический университет связи и информатики»

    (МТУСИ)

    Кафедра Математическая кибернетика и информационные технологии

    Отчет по лабораторной работе № 1

    по дисциплине «Структуры и алгоритмы обработки данных»

    на тему: «Методы сортировки»

    Вариант 11


    Выполнила: студентка группы БСТ20
    Проверил: Чайка А.Д.
    Москва 2022

    1 Цель работы

    Изучить основы синтаксиса Python. Изучить различные методы сортировки массивов.

    2 Задание

    Посредством создания нового python-проекта произвести решение следующих задания:

    Задание №1

    Создать программу, которая выводит в консоль фразу «Hello, world!».

    Задание №2

    Написать генератор случайных матриц(многомерных), который принимает опциональные параметры m, n, min_limit, max_limit, где m и n указывают размер матрицы, а min_lim и max_lim - минимальное и максимальное значение для генерируемого числа . По умолчанию при отсутствии параметров принимать следующие значения: m = 50, n = 50, min_limit = -250, max_limit = 1011.

    Задание №3

    Реализовать методы сортировки строк числовой матрицы в соответствии с заданием. Оценить время работы каждого алгоритма сортировки и сравнить его со временем стандартной функции сортировки. Испытания проводить на сгенерированных матрицах.

    Методы: Выбором, вставкой, обменом, Шелла, турнирная, быстрая, пирамидальная.

    Задание №4

    Создать публичный репозиторий на github, и запушить выполненное задание.

    3 Ход работы

    3.1. Ход работы над заданием №1

    3.1.1 Код программы

    print("Hello, world!")

    3.1.2 Результат работы программы



    Рисунок 1 – Результат работы первой программы

    3.2. Ход работы над заданием №2

    3.2.1 Код программы

    import random

    s = input()
    M = [50, 50, -250, 1011]
    if (s != ''):
    i = 0
    j = 0
    while i < len(s):
    s_int = ''
    flag = False
    while '0' <= s[i] <= '9' or s[i] == '-':
    if s[i] == '-':
    flag = True
    else:
    s_int += s[i]
    i += 1
    if i >= len(s):
    break
    i += 1
    M[j] = int(s_int)
    if flag:
    M[j] *= -1
    j += 1
    Matrix = [[random.randint(M[2], M[3]) for i in range(M[0])] for i in range(M[1])]

    for i in range(M[1]):
    for j in range(M[0]):
    print(Matrix[i][j], end = ' ')
    print()
    3.2.2 Результат работы программы



    Рисунок 2 – Результат работы второй программы

    3.3. Ход работы над заданием №3

    3.3.1 Описание программы

    def generateArray(m = 50, n = 50, min_limit = 250, max_limit = 1011) – Метод, генерирующий матрицу;

    defselectionSort(b) – Метод сортировки выбором;

    definsertionSort(b) – Метод сортировки вставкой;
    defexchangeSort(b) – Метод сортировки обменом;

    defshellsSort(b) Метод сортировки Шелла;

    deftournamentSort(array) – Метод турнирной сортировки;

    defsupportTournamentSortMethod(arr) – Вспомогательный метод турнирной сортировки;

    defquickSort(a) – Метод быстрой сортировки;

    defsupportQuickSortMethod(anotherFirst, anotherLast, array, row) – Вспомогательный метод быстрой сортировки ;

    defsupportPyramidSortMethod(a, n, i) – Вспомогательный метод пирамидальной сортировки;

    defpyramidSort(b) – Метод пирамидальной сортировки.


    3.3.2 Код программы

    import random
    import timeit

    def generateArray(m = 50, n = 50, min_limit = 250, max_limit = 1011):
    matrix = [[random.randint(min_limit, max_limit) for i in range(m)] for i in range(n)]
    for i in range(m):
    for j in range(n):
    print(matrix[j][i], end = ' ')
    print()
    return matrix

    def selectionSort(b):
    a = b.copy()
    for k in range(len(a)):
    for i in range(len(a[k]) - 1):
    m = i
    j = i + 1
    while j < len(a[k]):
    if a[k][j] < a[k][m]:
    m = j
    j = j + 1
    a[k][i], a[k][m] = a[k][m], a[k][i]
    return a

    def insertionSort(b):
    a = b.copy()
    for p in range(len(a)):
    for i in range(1, len(a[p])):
    k = a[p][i]
    j = i-1
    while j >= 0 and k < a[p][j]:
    a[p][j+1] = a[p][j]
    j -= 1
    a[p][j+1] = k
    return a

    def exchangeSort(b):
    a = b.copy()
    for p in range(len(a)):
    for i in range(len(a[p])):
    for j in range(len(a[p]) - i - 1):
    if a[p][j] > a[p][j + 1]:
    a[p][j], a[p][j + 1] = a[p][j + 1], a[p][j]
    return a

    def shellsSort(b):
    a = b.copy()
    for p in range(len(a)):
    d = len(a) // 2
    while d:
    for i, el in enumerate(a[p]):
    while i >= d and a[p][i - d] > el:
    a[p][i] = a[p][i - d]
    i -= d
    a[p][i] = el
    d = 1 if d == 2 else int(d * 5.0 / 11)
    return a

    def tournamentSort(array):
    arr = array.copy()
    for i in range(len(arr)):
    supportTournamentSortMethod(arr[i])
    return arr

    def supportTournamentSortMethod(arr):
    t = [None] * 2 * (len(arr) + len(arr) % 2)
    index = len(t) - len(arr) - len(arr) % 2

    for i, v in enumerate(arr):
    t[index + i] = (i, v)

    for j in range(len(arr)):
    n = len(arr)
    index = len(t) - len(arr) - len(arr) % 2
    while index > -1:
    n = (n + 1) // 2
    for i in range(n):
    i = max(index + i * 2, 1)
    if t[i] != None and t[i + 1] != None:
    if t[i][1] < t[i + 1][1]:
    t[i // 2] = t[i]
    else:
    t[i // 2] = t[i + 1]
    else:
    t[i // 2] = t[i] if t[i] != None else t[i + 1]
    index -= n

    index, x = t[0]
    arr[j] = x
    t[len(t) - len(arr) - len(arr) % 2 + index] = None

    def quickSort(a):
    b = a.copy()
    for i in range(len(b)):
    supportQuickSortMethod(0, len(b[i]) - 1, b, i)
    return b

    def supportQuickSortMethod(anotherFirst, anotherLast, array, row):
    first = int(anotherFirst)
    last = int(anotherLast)
    middle = int((first + last) / 2)

    while (first < last):

    while (array[row][first] < array[row][middle]):
    first += 1
    while (array[row][last] > array[row][middle]):
    last -= 1
    if (first <= last):
    array[row][first], array[row][last] = array[row][last], array[row][first]
    first += 1
    last -= 1

    if (anotherFirst < last):
    supportQuickSortMethod(anotherFirst, last, array, row)
    if (first < anotherLast):
    supportQuickSortMethod(first, anotherLast, array, row)

    def supportPyramidSortMethod(a, n, i):
    largest = i
    l = 2 * i + 1
    r = 2 * i + 2

    if l < n and a[i] < a[l]:
    largest = l

    if r < n and a[largest] < a[r]:
    largest = r

    if largest != i:
    a[i], a[largest] = a[largest], a[i]

    supportPyramidSortMethod(a, n, largest)

    def pyramidSort(b):
    a = b.copy()
    for i in range(len(a)):
    n = len(a[i])

    for j in range(n, -1, -1):
    supportPyramidSortMethod(a[i], n, j)

    for j in range(n-1, 0, -1):
    a[i][j], a[i][0] = a[i][0], a[i][j]
    supportPyramidSortMethod(a[i], j, 0)
    return a

    s = input()
    if (s != ''):
    M = [0, 0, 0, 0]
    i = 0
    j = 0
    while i < len(s):
    s_int = ''
    flag = False
    while '0' <= s[i] <= '9' or s[i] == '-':
    if s[i] == '-':
    flag = True
    else:
    s_int += s[i]
    i += 1
    if i >= len(s):
    break
    i += 1
    M[j] = int(s_int)
    if flag:
    M[j] *= -1
    j += 1
    arrayExample = generateArray(M[0], M[1], M[2], M[3])
    else:
    arrayExample = generateArray()
    startTime = timeit.default_timer()
    selectionSort(arrayExample)
    print("Время работы сортировки выбором: " + str(timeit.default_timer() - startTime))

    startTime = timeit.default_timer()
    insertionSort(arrayExample)
    print("Время работы сортировки вставкой: " + str(timeit.default_timer() - startTime))

    startTime = timeit.default_timer()
    exchangeSort(arrayExample)
    print("Время работы сортировки обменом: " + str(timeit.default_timer() - startTime))

    startTime = timeit.default_timer()
    shellsSort(arrayExample)
    print("Время работы сортировки Шелла: " + str(timeit.default_timer() - startTime))

    startTime = timeit.default_timer()
    tournamentSort(arrayExample)
    print("Время работы турнирной сортировки: " + str(timeit.default_timer() - startTime))

    startTime = timeit.default_timer()
    pyramidSort(arrayExample)
    print("Время работы сортировки пирамидальной сортировка: " + str(timeit.default_timer() - startTime))

    startTime = timeit.default_timer()
    quickSort(arrayExample)
    print("Время работы быстрой сортировки: " + str(timeit.default_timer() - startTime))

    mas = arrayExample.copy()
    startTime = timeit.default_timer()
    mas.sort()
    print("Время работы встроенной сортировки: " + str(timeit.default_timer() - startTime))
    3.3.2 Результат работы программы



    Рисунок 3 – Результат работы третьей программы при вводе дополнительных данных


    Рисунок 4 – Результат работы третьей программы без ввода данных

    3.2. Ход работы над заданием №4

    3.2.1 Ссылка не репозиторий

    https://github.com/ajuga-reptans/KuriloBST2001/tree/master/pythonProject1

    3.2.2 Результат работы



    Рисунок 5 – Файлы программ, загруженные в репозиторий

    4 Вывод

    В процессе выполнения данной лабораторной работы я изучила основы синтаксиса Python и различные методы сортировки массивов. А также сравнила время работы каждого метода сортировки со встроенной.


    написать администратору сайта