Giter Site home page Giter Site logo

word-counter's Introduction

Подсчет количества слов в документе

Задача обработать файл содержащий N слов. Суть решения заключается в использовании внешней сортировки. Данные обрабатываются в 3 прохода:

  1. Из исходного файла читает по X слов, переводим их в нижний регистр, сортируем сегмент встроенными средствами и записываем сортированные сегменты во временные файлы с суффиксом '.0' (0.0, 1.0, 2.0, etc.) по X слов в каждом файле. Где X << N. На этом шаге нужно O(X) памяти и O(N) времени. Вообще O(N * X * log(X)), но X константа, поэтому O(N).
  2. Используюя идею merge sort: берем по два временных файла сгенерированных на предыдущем шаге (например 0.0 и 1.0) и сливаем их в файл с именем с суффиксом '.1' (например 0.1). Проделываем операцию пока не кончатся файлы с суффиксом '.0'. Повторяем этот шаг в обратную сторону: мержим по два файла с суффиксом '.1', в один файл c суффиксом '.0'. Повторяем шаг пока не останется один файл. На этом шаге нужно O(1) памяти (только под два слова, по одному из каждого сливаемого файла) и O(N * log(N)) времени, так как этот шаг нужно повторить log(N/X) раз. Но нужно 2 * N дополнительной памяти на диске под временные файлы.
  3. В полученном отсортированном файле легко посчитать количество слов в один проход. O(1) памяти, O(N) времени.

Итого получаем алгоритм работающий за O(N*log(N)) времени и требующий O(1) оперативной памяти и 2 * N памяти на диске.

Пример

"Война и Мир" на английском языке содержит ~570000 слов. На компьютере AMD FX-8320 c HDD обработка этого файла занимает 1m40s и укладывается в ~500+300кБайт оперативной памяти (500кБайт уже выделенно скрипту перед началом обработки).

word-counter's People

Watchers

James Cloos avatar Viktor avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.