안녕하세요! 오늘 강의는 다른 강의와 조금 다를 것입니다. Java와 간접적으로만 관련된다는 점에서 다릅니다. 그러나 이 주제는 모든 프로그래머에게 매우 중요합니다. 우리는 알고리즘 에 대해 이야기하겠습니다 . 알고리즘이란 무엇입니까? 간단히 말해서 이는 원하는 결과를 얻기 위해 수행해야 하는 특정 작업 순서입니다 . 우리는 일상생활에서 알고리즘을 자주 사용합니다. 예를 들어, 매일 아침 학교나 직장에 가면서 동시에 다음과 같은 과제에 직면하게 됩니다.
- 옷을 입은
- 깨끗한
- 잘 먹은
- 알람 시계에 일어나십시오.
- 샤워를 하고, 세수를 하세요.
- 아침 식사를 준비하고 커피/차를 만드세요.
- 먹다.
- 저녁 이후로 옷을 다림질하지 않았다면 다림질하십시오.
- 옷을 입다.
- 집을 떠나다.
- "러시아 개인 이름 사전" 1966년판을 인터넷에서 구매하거나 다운로드하세요.
- 이 사전에서 목록에 있는 모든 이름을 찾아보세요.
- 그 이름이 사전의 어느 페이지에 있는지 종이에 적어보세요.
- 종이에 적힌 메모를 사용하여 이름을 순서대로 적으세요.
for
이 작업을 수행하는 일반 루프를 작성합니다.
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
작성된 알고리즘의 복잡성은 무엇입니까? 선형, O(N). 프로그램이 수행해야 하는 작업의 수는 전달된 숫자의 정확한 수에 따라 달라집니다. 배열에 100개의 숫자가 있으면 100개의 작업이 수행됩니다(화면에 출력). 배열에 10,000개의 숫자가 있으면 10,000개의 작업을 수행해야 합니다. 알고리즘을 개선할 수 있나요? 아니요. 어쨌든 우리는 어레이를 통해 N개의 패스를 만들고 콘솔에 N개의 출력을 수행해야 합니다. 또 다른 예를 살펴보겠습니다.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
LinkedList
여러 숫자를 삽입하는 빈 숫자가 있습니다 . 우리는 예제에 단일 숫자를 삽입하는 알고리즘의 복잡성 LinkedList
과 이것이 목록의 요소 수에 따라 어떻게 달라지는지 추정해야 합니다. 대답은 O(1) - 지속적인 복잡성 입니다 . 왜? 참고: 목록 시작 부분에 숫자를 삽입할 때마다. 또한, 기억하시는 것처럼 요소에 숫자를 삽입할 때 요소는 어디로도 이동되지 않습니다. 링크가 재정의됩니다(LinkedList 작동 방식을 갑자기 잊어버린 경우 이전 강의LinkedList
중 하나를 살펴보세요 ). 이제 목록의 첫 번째 숫자가 number 이고 목록 시작 부분에 숫자 y를 삽입하는 경우 필요한 것은 다음과 같습니다. х
x.previous = y;
y.previous = null;
y.next = x;
이 참조 재정의의 경우 현재 숫자가 몇 개인지 (최소 1개, 최소 10억) 는 중요하지 않습니다 . LinkedList
알고리즘의 복잡도는 O(1)로 일정합니다.
GO TO FULL VERSION