Загрузка...

Заплачу 50р за оптимизацию моего кода

Тема в разделе Python создана пользователем WORDIS 16 апр 2020. 520 просмотров

  1. WORDIS
    WORDIS Автор темы 16 апр 2020 Я не верю в бога - я пытаюсь им стать 73 7 апр 2020
    При вводе 100000 строк код работает чуть больше 4 секунд, а максимум 4 сек. Если решили писать в ТГ.
    Анагра́мма (от греч. ανα- — «пере» и γράμμα — «буква») — литературный приём, состоящий в перестановке букв или звуков определённого слова (или словосочетания), что в результате даёт другое слово или словосочетание (Википедия).

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

    Формат ввода
    В первой строке идёт целое число n (1 ≤ n ≤ 100 000), количество исходных слов.

    Далее следует n слов, по одному слову в строке, слова могут идти в разном регистре!

    Формат вывода
    В одной строке должны идти слова, которые являются анаграммами друг для друга, в нижнем регистре, через пробел. Порядок слов — лексикографический (как в словаре). Порядок строк так же лексикографический.

    Пример

    Ввод

    11
    окорок
    петлей
    Плетей
    рококо
    теплей
    Тишь
    ТОМНО
    тонко
    тонок
    тоном
    шить

    Вывод

    окорок рококо
    петлей плетей теплей
    тишь шить
    томно тоном
    тонко тонок



    Код
    a, c = [input().lower() for _ in range(int(input()))], []
    for i in a:
    b = [j for j in a if sorted(i) == sorted(j)]
    if len(b) > 1:
    c.append(b)
    for p in range(len([j for j in a if sorted(i) == sorted(j) and i != j])):
    del a[p]
    print(*sorted([' '.join(sorted(i)) for i in c]), sep='\n')
    [IMG]
    Ограничение ответов в теме:
    Автор темы разрешил отвечать в теме только этим группам (и вышестоящим): Команда форума и Кураторы.
     
  2. sesu
    sesu 17 апр 2020 Ты не умеешь писать код 114 17 ноя 2019
    У тебя сложность O(n^2) , тебе не нужно проходится по каждому элементу
    --- Сообщение объединено с предыдущим 17 апр 2020
    Можно выполнять за линейное время
     
    1. Посмотреть предыдущие комментарии (4)
    2. WORDIS Автор темы
      sesu, я разве что-то писал про память? я написал, что он немного не эффективный по времени
    3. sesu
      WORDIS, по памяти , по времени
    4. WORDIS Автор темы
      sesu, ну а ты разве не цикл в цикле предлагаешь?
Загрузка...
Top