Sem I (Program I) - N4 Flashcards

1
Q

Что такое Bubble Sort? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Простой алгоритм сортировки, который повторно проходит по списку, сравнивает соседние элементы и меняет их местами, если они находятся в неправильном порядке. Проход по списку повторяется до тех пор, пока список не будет отсортирован. Алгоритм получил свое название из-за того, что меньшие элементы “всплывают” на вершину списка.

1) Временная сложность: O(n^2) в худшем и среднем случае.
2) Пространственная сложность: O(1) (сортировка на месте).
3) Стабильность: Да.
4) Использование: Лучше всего подходит для небольших наборов данных или когда набор данных почти отсортирован.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое Selection Sort? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Алгоритм сортировки методом прямого выбора, который делит входной список на две части: подсписок уже отсортированных элементов, который строится слева направо в начале списка, и подсписок элементов, остающихся для сортировки. Алгоритм неоднократно выбирает наименьший (или наибольший) элемент из неотсортированного подсписка, меняет его местами с самым левым неотсортированным элементом и передвигает границы подсписка на один элемент вправо.

1) Временная сложность: O(n^2) в худшем и среднем случае.
2) Пространственная сложность: O(1) (сортировка на месте).
3) Стабильность: Нет.
4) Использование: Полезно, когда ограничена память, так как требуется всего O(1) дополнительного пространства.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое Insertion Sort? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Простой алгоритм сортировки, который строит окончательный отсортированный массив (или список) по одному элементу за раз. Он намного менее эффективен на больших списках по сравнению с более продвинутыми алгоритмами, такими как быстрая сортировка, пирамидальная сортировка или сортировка слиянием. Однако на практике он более эффективен по сравнению с другими квадратичными алгоритмами сортировки, такими как пузырьковая сортировка или сортировка выбором.

1) Временная сложность: O(n^2) в худшем и среднем случае, но O(n) в лучшем случае, когда массив уже отсортирован.
2) Пространственная сложность: O(1) (сортировка на месте).
3) Стабильность: Да.
4) Использование: Полезно для небольших наборов данных или когда массив уже частично отсортирован.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое Merge Sort? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Эффективный стабильный алгоритм сортировки, основанный на сравнении и разделении.

1) Временная сложность: O(n log n) в худшем, среднем и лучшем случае.
2) Пространственная сложность: O(n) из-за необходимости временного массива.
3) Стабильность: Да.
4) Использование: Полезно для сортировки связанных списков и внешней сортировки (сортировка данных, которые слишком велики, чтобы поместиться в память).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое Quick Sort? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Внутренний, основанный на сравнении алгоритм сортировки. Он работает, выбирая элемент ‘опорный элемент’ из массива и разделяя остальные элементы на две подмножества, в зависимости от того, меньше они или больше опорного элемент. Затем подмножества сортируются рекурсивно.

1) Временная сложность: O(n^2) в худшем случае, O(n log n) в среднем.
2) Пространственная сложность: O(log n) из-за рекурсии.
3) Стабильность: Нет.
4) Использование: Один из самых широко используемых алгоритмов для больших наборов данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое Heap Sort? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

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

1) Временная сложность: O(n log n) в худшем, среднем и лучшем случае.
2) Пространственная сложность: O(1) (сортировка на месте).
3) Стабильность: Нет.
4) Использование: Полезно, когда требуется хорошая производительность в худшем случае.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое LinearSearch? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Algorithm that checks every element in the list until it finds the target value.

1) Временная сложность O(n)
2) Пространственная сложность O(1)
4) Используется для небольших массивов или неотсортированных данных, где производительность не является критически важной.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое BinarySearch? и его характеристики:
1) Временная сложность
2) Пространственная сложность
3) Стабильность
4) Использование

A

Eefficient algorithm for finding an item from a sorted list of items by repeatedly dividing the search interval in half.

1) Временная сложность O(log n)
2) Пространственная сложность O(1)
3) Стабильность - Нестабильный (может потребоваться изменение порядка элементов в рекурсивном варианте).
4) Используется для поиска в отсортированных массивах или списках.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

O(1)

A

Время выполнения алгоритма не зависит от размера входных данных. Примеры включают доступ к элементу массива по индексу или проверка значения в хэш-таблице.

def get_first_element(arr):
    return arr[0]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

O(log n)

A

Выполнения алгоритма увеличивается логарифмически с увеличением входных данных. Часто встречается в алгоритмах бинарного поиска.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что означает Логарифм размера входных данных?

A

Математическая функция, обратная возведению в степень.

Логарифм по основанию 2 от числа n обозначается как log2(n). Это число 𝑘, такое что 2^𝑘=𝑛.

Примеры:

- log2(1) = 0, потому что 2^0 = 1
- log2(2) = 1, потому что 2^1 = 2
- log2(4) = 2, потому что 2^2 = 4
- log2(8) = 3, потому что 2^3 = 8
- log2(16) = 4, потому что 2^4 = 16

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

O(n)

A

Время выполнения алгоритма растет линейно с увеличением размера входных данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

O(n log n)

A

Часто встречается в алгоритмах сортировки, таких как быстрая сортировка и сортировка слиянием. Эти алгоритмы более эффективны, чем O(n²) алгоритмы для больших наборов данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

O(n²)

A

Время выполнения алгоритма увеличивается квадратично с увеличением размера входных данных. Часто встречается в алгоритмах с вложенными циклами, например, в сортировке пузырьком или сортировке вставками.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

InputStream (JAVA)

A

абстрактный класс, который используется для чтения байтов данных. Он находится в пакете java.io.

InputStream inputStream = new FileInputStream("file.txt");
int data = inputStream.read();
while (data != -1) {
    System.out.print((char) data);
    data = inputStream.read();
}
inputStream.close();
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

OutputStream (JAVA)

A

абстрактный класс, который используется для записи байтов данных. Он находится в пакете java.io.

OutputStream outputStream = new FileOutputStream("file.txt");
outputStream.write(65);  // записывает символ 'A'
outputStream.close()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

InputStreamReader (JAVA)

A

используется для чтения потоков ввода байтов и преобразования их в символы, используя указанную кодировку символов. Он является мостом между потоками байтов и потоками символов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Ternary operator (JAVA)

A

Concise way to express conditional statements.
takes three operands.: condition ? expression1 : expression2

int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println("The maximum value is " + max);
int num = 5;
String result = (num % 2 == 0) ? "Even" : "Odd";
System.out.println(num + " is " + result);
int a = 10;
int b = 20;
int c = 30;
int max = (a > b) ? (a > c ? a : c) : (b > c ? b : c);
System.out.println("The maximum value is " + max);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

System.in.read()

A

Позволяет читать байты из стандартного входного потока (обычно это консоль). Этот метод блокирует выполнение программы до тех пор, пока не будет введен хотя бы один байт. Он возвращает значение типа int, представляющее байт, который был прочитан, или -1, если достигнут конец потока.

import java.io.IOException;

public class ReadByte {
    public static void main(String[] args) {
        System.out.println("Введите символ:");
        try {
            int input = System.in.read();
            System.out.println("Вы ввели: " + (char) input);
        } catch (IOException e) {
            System.err.println("Ошибка ввода-вывода: " + e.getMessage());
        }
    }
}
import java.io.IOException;

public class ReadUntilEOF {
    public static void main(String[] args) {
        System.out.println("Введите данные (для завершения нажмите Ctrl+D или Ctrl+Z):");
        try {
            int input;
            while ((input = System.in.read()) != -1) {
                System.out.print((char) input);
            }
        } catch (IOException e) {
            System.err.println("Ошибка ввода-вывода: " + e.getMessage());
        }
    }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

BufferedReader (JAVA)

A

Используется для более эффективного чтения текста из потока ввода, который может быть файла, клавиатуры или другого источника. Он оборачивает Reader и использует буфер для чтения больших блоков данных за один раз, что увеличивает производительность при чтении.

read(): Читает один символ
read(char[] cbuf, int off, int len): Читает символы в массив
readLine(): Читает одну строку текста.
close(): Закрывает поток и освобождает ресурсы.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderExample {
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Введите строку текста:");
        try {
            String input = br.readLine();
            System.out.println("Вы ввели: " + input);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

InputStreamReader (JAVA)

A

используется для чтения потоков байтов и их преобразования в символы, используя определённую кодировку. Это удобно для чтения текстовых данных из различных источников, таких как файлы или сетевые сокеты, где данные могут поступать в виде байтов.

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException;

public class InputStreamReaderExample {
    public static void main(String[] args) {
        // Путь к файлу
        String fileName = "example.txt";

        // Объявляем InputStream и InputStreamReader вне блока try
        FileInputStream fileInputStream = null;
        InputStreamReader inputStreamReader = null;

        try {
            // Создаем FileInputStream для файла
            fileInputStream = new FileInputStream(fileName);

            // Создаем InputStreamReader, обернув FileInputStream
            inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");

            // Переменная для хранения считанного символа
            int data;

            // Читаем данные побайтово и выводим на экран
            while ((data = inputStreamReader.read()) != -1) {
                // Преобразуем int в char
                char theChar = (char) data;
                System.out.print(theChar);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Закрываем ресурсы в блоке finally
            try {
                if (inputStreamReader != null) {
                    inputStreamReader.close();
                }
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}
22
Q

java.io.FileInputStream

A

это класс в Java, который используется для чтения байтов из файла.

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamBufferExample {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("example.txt");
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                System.out.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
23
Q

Integer.parseInt()

A

method in Java that converts a String to an int.

public class Main {
    public static void main(String[] args) {
        String numberString = "123";
        int number = Integer.parseInt(numberString);
        System.out.println("Parsed integer: " + number); // Output: Parsed integer: 123
    }
}
24
Q

Method in Java that converts a String to an int.

A

Integer.parseInt()

public class Main {
    public static void main(String[] args) {
        String numberString = "123";
        int number = Integer.parseInt(numberString);
        System.out.println("Parsed integer: " + number); // Output: Parsed integer: 123
    }
}
25
Q

hasNextLine

A

used to check whether the scanner has another line of input.

import java.util.Scanner;

public class HasNextLineExample {
    public static void main(String[] args) {
         standard input (console)
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("Enter some text (type 'exit' to quit):");
				
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
           
            if (line.equalsIgnoreCase("exit")) {
                break;
            }
            System.out.println("You entered: " + line);
        }
        scanner.close();
        System.out.println("Scanner closed.");
    }
}
26
Q

Check whether the scanner has another line of input.

A

hasNextLine

import java.util.Scanner;

public class HasNextLineExample {
    public static void main(String[] args) {
         standard input (console)
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("Enter some text (type 'exit' to quit):");
				
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
           
            if (line.equalsIgnoreCase("exit")) {
                break;
            }
            System.out.println("You entered: " + line);
        }
        scanner.close();
        System.out.println("Scanner closed.");
    }
}
27
Q

useDelimiter (JAVA)

A

allows you to set a custom delimiter for the scanner, which determines how the input is split into tokens. By default, the Scanner class uses whitespace (spaces, tabs, and newlines)

import java.util.Scanner;

public class UseDelimiterExample {
    public static void main(String[] args) {
        String input = "apple,banana,orange,grape";
        Scanner scanner = new Scanner(input);
        scanner.useDelimiter(",");

        while (scanner.hasNext()) {
            System.out.println(scanner.next());
        }
        scanner.close();
    }
}
28
Q

Set a custom delimiter for the scanner (JAVA)

A

useDelimiter

import java.util.Scanner;

public class UseDelimiterExample {
    public static void main(String[] args) {
        String input = "apple,banana,orange,grape";
        Scanner scanner = new Scanner(input);
        scanner.useDelimiter(",");

        while (scanner.hasNext()) {
            System.out.println(scanner.next());
        }
        scanner.close();
    }
}
29
Q

Create a new array by copying elements from an existing array.

A

Arrays.copyOf()

int[] originalArray = {1, 2, 3, 4, 5};

// Copy entire array
int[] copiedArray = Arrays.copyOf(originalArray, originalArray.length);

// Copy with a larger size
int[] largerArray = Arrays.copyOf(originalArray, 8);  // {1, 2, 3, 4, 5, 0, 0, 0}

// Copy with a smaller size
int[] smallerArray = Arrays.copyOf(originalArray, 3);  // {1, 2, 3}

System.out.println(Arrays.toString(copiedArray));  // Output: [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(largerArray));  // Output: [1, 2, 3, 4, 5, 0, 0, 0]
System.out.println(Arrays.toString(smallerArray)); // Output: [1, 2, 3]
30
Q

Arrays.fill()

A

Allows to fill all or part of an array with a specific value.

Arrays.fill(array, value);

Arrays.fill(array, fromIndex, toIndex, value);

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] numbers = new int[5];
        Arrays.fill(numbers, 7);

        System.out.println(Arrays.toString(numbers)); // Output: [7, 7, 7, 7, 7]
    }
}
31
Q

Arrays.deepEquals()

A

used to compare two arrays for equality. This method is particularly useful when dealing with nested arrays or multidimensional arrays

import java.util.Arrays;

public class DeepEqualsExample {
    public static void main(String[] args) {
        String[] array1 = {"a", "b", "c"};
        String[] array2 = {"a", "b", "c"};
        String[] array3 = {"a", "b", "d"};

        System.out.println(Arrays.deepEquals(array1, array2)); // true
        System.out.println(Arrays.deepEquals(array1, array3)); // false
    }
}
import java.util.Arrays;

public class DeepEqualsExample {
    public static void main(String[] args) {
        String[][] array1 = { {"a", "b"}, {"c", "d"} };
        String[][] array2 = { {"a", "b"}, {"c", "d"} };
        String[][] array3 = { {"a", "b"}, {"c", "e"} };

        System.out.println(Arrays.deepEquals(array1, array2)); // true
        System.out.println(Arrays.deepEquals(array1, array3)); // false
    }
}
32
Q

Compare two arrays for equality, also for 2 dimensional arrays.

A

Arrays.deepEquals()

import java.util.Arrays;

public class DeepEqualsExample {
    public static void main(String[] args) {
        String[] array1 = {"a", "b", "c"};
        String[] array2 = {"a", "b", "c"};
        String[] array3 = {"a", "b", "d"};

        System.out.println(Arrays.deepEquals(array1, array2)); // true
        System.out.println(Arrays.deepEquals(array1, array3)); // false
    }
}
import java.util.Arrays;

public class DeepEqualsExample {
    public static void main(String[] args) {
        String[][] array1 = { {"a", "b"}, {"c", "d"} };
        String[][] array2 = { {"a", "b"}, {"c", "d"} };
        String[][] array3 = { {"a", "b"}, {"c", "e"} };

        System.out.println(Arrays.deepEquals(array1, array2)); // true
        System.out.println(Arrays.deepEquals(array1, array3)); // false
    }
}
33
Q

Fill all or part of an array with a specific value. (JAVA)

A

Arrays.fill()

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] numbers = new int[5];
        Arrays.fill(numbers, 7);

        System.out.println(Arrays.toString(numbers)); // Output: [7, 7, 7, 7, 7]
    }
}
34
Q

What is n log(2) n.
For n = 8 and For n = 16.

A

The 𝑛 log 𝑛 function combines linear growth n with logarithmic growth log 𝑛. As 𝑛 increases, 𝑛 log 𝑛 increases more rapidly than log 𝑛 but not as quickly as 𝑛^2 .

For 𝑛 = 8:
1) log(2) 8= 3
2) n log(2) n = 8 * 3 = 24

For 𝑛 = 16:
1) log(2) 16= 4
2) n log(2) n = 16 * 4 = 64

35
Q

Arrays.deepToString()

A

method in Java used to generate a string representation of the contents of a multidimensional array.

 import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[][] twoDArray = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        System.out.println(Arrays.toString(twoDArray));  // Outputs: [[I@1b6d3586, [I@4554617c, [I@74a14482]
        System.out.println(Arrays.deepToString(twoDArray));  // Outputs: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    }
}
36
Q

Arrays.toString()

A

method in Java is used to generate a string representation of the elements of a one-dimensional array.

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] intArray = {10, 20, 30, 40, 50};
        System.out.println(Arrays.toString(intArray));  // Outputs: [10, 20, 30, 40, 50]
    }
}
37
Q

Static (java)

A

used to indicate that a particular member belongs to the class itself rather than to instances of the class.

Static Variables: Shared among all instances of the class.
Static Methods: Can be called without an instance; can’t access instance data/methods directly.
Static Blocks: Used for static initialization, run when the class is loaded.
Static Nested Classes: Nested classes that don’t require an instance of the outer class to be instantiated.

class MyClass {
    static int counter = 0;
}
class MyClass {
    static void printMessage() {
        System.out.println("Hello, World!");
    }
}
class MyClass {
    static int counter;
    static {
        counter = 100;  
    }
}
38
Q

public
1) Any Class
2) Child Class
3) Its package

A

1) Any Class ✅
2) Child Class ✅
3) Its package ✅

39
Q

protected
1) Any Class
2) Child Class
3) Its package

A

1) Any Class ❌
2) Child Class ✅
3) Its package ✅

40
Q

no modifier
1) Any Class
2) Child Class
3) Its package

A

1) Any Class ❌
2) Child Class ❌
3) Its package ✅

41
Q

private
1) Any Class
2) Child Class
3) Its package

A

1) Any Class ❌
2) Child Class ❌
3) Its package ❌

42
Q

Wie wird ein 2D-Vektor in Java erzeugt?

A
Punkt p1 = new Punkt(1.3f, 2.0f);
Vektor2D v1 = new Vektor2D(3, 5.5f, p1);
43
Q

Was bedeutet defensives Programmieren und wie sieht ein Beispiel dazu aus?

A

Defensives Programmieren stellt sicher, dass Methoden nur für gültige Eingaben funktionieren und bei ungültigen Eingaben Exceptions auslösen.

public static Vektor2D add1(Vektor2D v1, Vektor2D v2) throws IllegalArgumentException {
    if(v1 == null || v2 == null) 
        throw new IllegalArgumentException("Argumente dürfen nicht null sein");
    return new Vektor2D(v1.delX + v2.delX, v1.delY + v2.delY, v1.anker);
}
44
Q

Was passiert, wenn die Länge der Komponenten nicht mit der Dimension des Vektors übereinstimmt, und wie wird dies behandelt?

A

Wenn die Anzahl der Komponenten (komponenten.length) nicht der angegebenen Dimension entspricht, muss dies explizit behandelt werden, um Fehler zu vermeiden. Dies kann durch eine Prüfung im Konstruktor erfolgen.

45
Q

Was ist eine Matrix in der Programmierung?

A

Eine Matrix ist eine Sammlung von Elementen, die in Zeilen und Spalten angeordnet sind. In der Programmierung wird sie häufig als mehrdimensionales Array modelliert.

46
Q

Wie wird eine 2x3-Matrix in Java initialisiert?

A

Eine 2x3-Matrix wird wie folgt initialisiert: int[][] matrix = new int[2][3];

47
Q

Wie können die Werte einer Matrix explizit zugewiesen werden?

A
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[1][0] = 11;
matrix[1][1] = 22;
matrix[2][0] = 42;
matrix[2][1] = -3;
int[][] matrix = {{1, 2}, {11, 22}, {42, -3}};
48
Q

Was sind “offene Arrays”?

A

Offene Arrays sind mehrdimensionale Arrays, bei denen nicht alle Dimensionen festgelegt sind.

int[][][] array = new int[5][3][];
49
Q

Wie funktioniert die Initialisierung eines Arrays mit variabler Größe?

A
int[][] array = new int[3][];
array[0] = new int[2];
array[1] = new int[3];

-----------------------
array[0] -> [0, 0]
array[1] -> [0, 0, 0]
array[2] -> null
50
Q

Ist die Anzahl der Dimensionen bei der Deklaration eines Arrays immer festgelegt?

A

Ja, zumindest eine Dimension muss immer festgelegt sein. Die restlichen Dimensionen können offen gelassen werden.