O (C) Время сложности, чтобы прочитать текстовый файл несколько гигабайт - PullRequest
0 голосов
/ 09 июля 2019

Мне было поручено решить загадку следующим образом: Запрограммировать синтаксический анализатор ввода (в C, Python, Java или Go), который читает файл со стандартного ввода и считывает данные в байтовый массив (8-битные байты).).проверяет, имеет ли строка уникальный набор байтовых значений.Если это так, он должен отслеживать номер строки. Наконец, он должен распечатать номера строк, которые имеют уникальный набор байтовых значений в каждой строке.

-Программа должна работать эффективно и в течение времени -оно не должно достигать большой сложности O (n ^ 2) или хуже.Попробуй посмотреть, сможешь ли ты сделать это за большое O (n) время.- Файл должен быть прочитан в байтовый массив (8-битные значения) без превышения объема памяти.

Я читаю из используемого файла примера размером 50 МБ, строка за строкой и сохраняю строку вбайтовый массив затем вызывает метод checkDuplicate(byte[] arr) и передает байтовый массив, а затем создает хэш-набор и перебирает элементы массива и добавляет их в хэш-набор, а затем возвращает размер хэш-набора.Поскольку хэш-наборы не допускают дублирования в основном, я проверяю, равен ли возвращенный размер размеру массива, чтобы определить, является ли он уникальным или нет, чтобы сохранить номер строки.

private  int checkDuplicate(byte[] arr) {
         HashSet<Byte> byteSet = new HashSet<Byte>();
         int size=0;
         for (byte e : arr){

                if (e != 0 && byteSet.add(e)) {}

                    size = byteSet.size();
            }

        return size;
    }

Может O (c) или O (n) будет достигнуто?Я получаю O (n ^ 2) до сих пор и буду обрабатывать исключения памяти позже, когда достигну O (n).

также, уменьшит ли решение проблемы в python сложность времени / пространства?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...