Suggest an editImprove this articleRefine the answer for “What are the "input data" and "output data" of an algorithm?”. Your changes go to moderation before they’re published.Approval requiredContentWhat you’re changing🇺🇸EN🇺🇦UAPreviewTitle (EN)Short answer (EN)**Input data** of an algorithm are the values/structures that the algorithm accepts and performs operations on. **Output data** is the result of the algorithm's work, returned after processing the input. Formally, an algorithm implements a mapping f: X → Y, where X is the set of valid inputs (domain) and Y is the set of possible outputs (codomain), sometimes accounting for errors: f: X → Y ∪ E. **Key point:** errors are also a form of output (an exception, a status code, Result<T, E>), even if they signal the impossibility of obtaining the main result.Shown above the full answer for quick recall.Answer (EN)Image## Short answer **Input data** of an algorithm are the values/structures that the algorithm accepts and performs operations on. **Output data** is the result of the algorithm's work, returned after processing the input. Formally, an algorithm implements a mapping f: X → Y, where X is the set of valid inputs (domain) and Y is the set of possible outputs (codomain), sometimes accounting for errors: f: X → Y ∪ E. ## Detailed breakdown ### Definitions - Input data: values, parameters, structures, or streams that are supplied to the algorithm for processing. - Output data: the result of the computation - a value, structure, stream, or signal (including an error) that the algorithm returns outward. ### Key properties and requirements - Domain and validity: which values are considered valid inputs (types, ranges, format). The algorithm must be able to validate the input and correctly handle invalid cases. - Determinism: for deterministic algorithms, the same input ⇒ the same output. For non-deterministic ones, the output may depend on randomness/environment. - Explicit formats: clear input/output contracts (types, units, encodings, locale, sorting, pagination, etc.). - Errors as part of the output: errors are also a form of output (an exception, a status code, Result<T, E>), even if they signal the impossibility of obtaining the main result. - Separating side effects: logging, writing to a database, sending emails are not "output data" but side effects. Output is what is returned as the result of the computation. ### Types of inputs/outputs (in practice) - Scalar: numbers, strings, booleans, dates/timestamps. - Structured: objects/dictionaries, records, JSON. - Collections: arrays, lists, sets, maps. - Streams: byte streams, iterators, reactive streams (Observable). - State signals: status codes, success/error flags, exceptions, Result<E, T>. ### Examples from development - Sorting an array: input is an array of numbers/strings, output is a sorted array (of the same length). - Login: input is an email/login and password; output is a token/session or an authorization error. - REST endpoint GET /users?limit=10&offset=20: input is query parameters; output is a JSON list of users and pagination metadata or a 4xx/5xx error. - Hash function: input is a byte string; output is a fixed hash string. ### Formalization An algorithm can be viewed as a function f: X → Y, where X is the set of valid inputs and Y is the set of outputs. In practice, it is often useful to explicitly account for errors: f: X → Y ∪ E, or to use types like Result<Y, E>. If some inputs are not supported, then f is partial: it is not defined on all of X, and this must be reflected in the contract. ### Boundaries and edge cases - Empty inputs: an empty array, an empty string - what should be returned? Often a neutral element or an error, depending on the task. - Invalid values: null/undefined/NaN, an incorrect format, incorrect encoding. - Overflows/leaky types: large numbers, long strings, large files. - Non-determinism: dependency on time, randomness, network - fix this in the contract (RNG seeds, timeouts, retries). ### Code example (JavaScript) ```javascript // Algorithm: compute the average of an array of numbers with input validation. // Input: numbers: unknown // Output: a result object { ok: boolean, value?: number, error?: string, meta?: object } function safeAverage(numbers) { if (!Array.isArray(numbers)) { return { ok: false, error: 'numbers must be an array' }; // error as output } const filtered = numbers.filter(n => typeof n === 'number' && Number.isFinite(n)); if (filtered.length === 0) { return { ok: false, error: 'no valid numbers' }; } const sum = filtered.reduce((a, b) => a + b, 0); const avg = sum / filtered.length; return { ok: true, value: avg, meta: { count: filtered.length } }; // main output } // Usage examples: // Input: [1, 2, 3] // Output: // { ok: true, value: 2, meta: { count: 3 } } // Input: ['a', Infinity] // Output: // { ok: false, error: 'no valid numbers' } // Bonus: parsing a query string (another algorithm) function parseQuery(qs) { const params = new URLSearchParams(qs.startsWith('?') ? qs.slice(1) : qs); const result = {}; for (const [k, v] of params) { if (k in result) result[k] = Array.isArray(result[k]) ? result[k].concat(v) : [result[k], v]; else result[k] = v; } return result; } // Input: '?q=test&tags=js&tags=algo' // Output: { q: 'test', tags: ['js', 'algo'] } ``` ### How to answer briefly in an interview - Give a definition: "Input is what the algorithm accepts, output is what it returns; an algorithm is a mapping f: X → Y". - Add a note about errors: "Errors are also a kind of output (for example, an exception or Result<E, T>)". - Give 1-2 practical examples from web development (login, sorting, a REST request).For the reviewerNote to the moderator (optional)Visible only to the moderator. Helps review go faster.