externalsort

package
v0.0.0-...-50b27ac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2023 License: MIT Imports: 1 Imported by: 0

README

externalsort

В этой задаче нужно написать однопроходную внешнюю сортировку слиянием. Моделируется ситуация, в которой данные расположены на внешних устройствах и суммарно не вмещаются в оперативную память, но каждый кусочек по отдельности вмещается.

Задача разбита на 3 составные части.

Reader & writer

Реализовать интерфейсы для построчного чтения/записи строк:

type LineReader interface {
	ReadLine() (string, error)
}

type LineWriter interface {
	Write(l string) error
}

и два конструктора:

func NewReader(r io.Reader) LineReader
func NewWriter(w io.Writer) LineWriter

NewLineReader оборачивает переданный io.Reader в LineReader.

Вызов ReadLine должен читать одну строку. Строка имеет произвольную длину. Конец строки определяется переводом строки ('\n'). Непустая последовательность символов после последнего перевода строки также считается строкой.

ReadLine должен возвращать io.EOF при достижении конца файла.

Merge

Функция слияния произвольного количества отсортированных групп строк:

func Merge(w LineWriter, readers ...LineReader) error

Merge по необходимости читает из reader'ов и пишет во writer.

Sort
Sort(w io.Writer, in ...string) error

Функция принимает на вход произвольное количество файлов, каждый из которых помещается в оперативную память, а также writer для записи результата.

Результаты сортировки отдельных файлов можно записывать поверх входных данных.

Ссылки

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Merge

func Merge(w LineWriter, readers ...LineReader) error

func Sort

func Sort(w io.Writer, in ...string) error

Types

type LineReader

type LineReader interface {
	ReadLine() (string, error)
}

func NewReader

func NewReader(r io.Reader) LineReader

type LineWriter

type LineWriter interface {
	Write(l string) error
}

func NewWriter

func NewWriter(w io.Writer) LineWriter

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL