Личные заметки о программировании, путешествиях, фотографии и разных интересностях.
👨🏻‍💻Обо мне  🗂Все заметки  ✏️О блоге

Позднее Ctrl + ↑

Изучение SQL: ключевое слово GO

SQL позволяет объединять несколько команд в один пакет, который будет выполняться вместе и представлять одно целое. В качестве сигнала завершения пакета и его выполнения служит команда GO. Смысл в том, что одни команды должны выполниться после выполнения предыдущих. Тем самым мы можем строить последовательность команд.

Например, создание БД и добавления в нее таблиц:

CREATE DATABASE TestDB
GO

USE TestDB

CREATE TABLE Users
(
	Id uniqueidintefier PRIMARY KEY IDENTITY,
	FirstName varchar(50) NOT NULL
)
 Нет комментариев    55   16 дн   sql

Оценка задач

«Там чуть-чуть, это не займет много времени» — так начинаются самые крупные задачи.

Алгоритмы сортировки

Классификация

  1. По степени роста сложности
  2. По использованию дополнительной памяти
  3. Рекурсивный или нет
  4. По устойчивости
  5. По методу сортировки: вставка, слияние, обмен

Распространенные алгоритмы

  • Сортировка пузырьком
  • Сортировка вставками
  • Сортировка выбором
  • Сортировка слиянием
  • Быстрая сортировка

Ссылка на сайт с гифками, которые демонстрируют работу алгоритмов: https://www.toptal.com/developers/sorting-algorithms

Сортировка пузырьком

Самая стандартная и простая сортировка. Выполняет проходы по массиву и перемещает наибольший элемент в конец массива.

Лучший вариант Средний вариант Худший вариант
Степень сложности O(n) O(n^2) O(n^2)
Рост памяти O(1) O(1) O(1)
public void Sort(int[] inputArray)
{
	for (int i = 0; i < inputArray.Length; i++) {
		for (int j = 1; j < inputArray.Length; j++) {
			if (inputArray[j-1] > inputArray[j]) {
				Swap(inputArray, j-1, j);
			}
		}
	}
}

public void Swap(int[] inputArray, int indexLeft, int indexRight)
{
	if (indexLeft == indexRight) return;
	var temp = inputArray[indexLeft];
	inputArray[indexLeft] = inputArray[indexRight];
	inputArray[indexRight] = temp;
}

Сортировка вставками
Также достаточно простой алгоритм, на каждом этапе которого выбирается один элемент массива, для которого осуществляется поиск позиции для вставки.

Лучший вариант Средний вариант Худший вариант
Степень сложности O(n) O(n^2) O(n^2)
Рост памяти O(1) O(1) O(1)
public static void Sort(int[] inputArray)
{
	int currentElementIndex= 1;
	while (currentElementIndex < inputArray.Length)
	{
		if (inputArray[currentElementIndex] < inputArray[currentElementIndex - 1]) {
			var newIndex = FindIndex(inputArray, inputArray[currentElementIndex]);
			Insert(inputArray, newIndex, currentElementIndex);
		}
		currentElementIndex++;
	}
}

public static int FindIndex(int[] inputArray, int element)
{
	for (int i = 0; i < inputArray.Length; i++)
	{
		if (inputArray[i] > element) {
			return i;
		}
	}
	return 0;
}

public static void Insert(int[] inputArray, int indexLeft, int indexRight)
{
	if (indexLeft == indexRight) return;
	var temp = inputArray[indexLeft];
	inputArray[indexLeft] = inputArray[indexRight];
	for (int current = indexRight; current > indexLeft; current--) {
		inputArray[current] = inputArray[current-1];
	}
	inputArray[indexLeft + 1] = temp;
}

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

Лучший вариант Средний вариант Худший вариант
Степень сложности O(n) O(n^2) O(n^2)
Рост памяти O(1) O(1) O(1)
public static void Sort(int[] input) {
	for (int i = 0; i < input.Length; i++) {
		var smallestElementIndex = FindIndexOfSmallestElement(input, i);
		Swap(input, smallestElementIndex, i);
	}
}

public static int FindIndexOfSmallestElement(int[] input, int startFrom = 0) {
	var smallestElementValue = input[startFrom];
	var smallestElementIndex = startFrom;
	for (int i = startFrom + 1; i < input.Length; i++)
	{
		if (smallestElementValue > input[i]) {
			smallestElementValue = input[i];
			smallestElementIndex = i;
		}
	}
	return smallestElementIndex;
}

public static void Swap(int[] input, int indexLeft, int indexRight)
{
	if (indexLeft == indexRight) return;
	var temp = input[indexLeft];
	input[indexLeft] = input[indexRight];
	input[indexRight] = temp;
}

Сортировка слиянием
Разбивает массив на подмассивы примерно одинакового размера, рекурсивно разбивает до тех пор, пока размер массива будет равен 1. После этого происходит сортировка частей и их соединение в один.

Лучший вариант Средний вариант Худший вариант
Степень сложности O(n log n) O(n log n) O(n log n)
Рост памяти O(n) O(n) O(n)
public static void Sort(int[] input) {
	if (input.Length <= 1) {
		return;
	}
	
	// Поделили массивы
	var leftSize = input.Length / 2;
	var rightSize = input.Length - leftSize;
	var left = new int[leftSize];
	var right = new int[rightSize];
	
	// Скопировали данные из основного массива
	Array.Copy(input, 0, left, 0, leftSize);
	Array.Copy(input, leftSize, right, 0, rightSize);
	
	Sort(left);
	Sort(right);
	
	Merge(input, left, right);
}

public static void Merge(int[] input, int[] left, int[] right) {
	var leftIndex = 0;
	var rightIndex = 0;
	var leftAndRightSize = left.Length + right.Length;
	
	for (int i = 0; i < leftAndRightSize; i++) {
		if (leftIndex >= left.Length) {
			input[i] = right[rightIndex];
			rightIndex++;
		}
		else if (rightIndex >= right.Length) {
			input[i] = left[leftIndex];
			leftIndex++;
		}
		else if (left[leftIndex] < right[rightIndex]) {
			input[i] = left[leftIndex];
			leftIndex++;
		}
		else {
			input[i] = right[rightIndex];
			rightIndex++;
		}
	}
}

Быстрая сортировка
Один из самых быстрых алгоритмов, о чем говорит название.

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

Лучший вариант Средний вариант Худший вариант
Степень сложности O(n log n) O(n log n) O(n^2)
Рост памяти O(1) O(1) O(1)
public static void Sort(int[] input, int leftIndex, int rightIndex) {
	var i = leftIndex;
	var j = rightIndex;
	var pivot = input[(leftIndex + rightIndex) >> 1];
	
	while (i <= j) {
		while (input[i] < pivot) {
			i++;
		}
		while (input[j] > pivot) {
			j--;
		}
		
		if (i <= j) {
			Swap(input, i, j);
			j--;
			i++;
		}
		
		if (leftIndex < j) {
			Sort(input, leftIndex, j);
		}
		
		if (rightIndex > i) {
			Sort(input, i, rightIndex);
		}
	}
}

public static void Swap(int[] input, int indexLeft, int indexRight)
{
	if (indexLeft == indexRight) return;
	var temp = input[indexLeft];
	input[indexLeft] = input[indexRight];
	input[indexRight] = temp;
}

Эмбиент плейлист

Случайно нашел в почте плейлист от Hammock, о проекте которых (sleepover.fm) я рассказывал раньше. Отлично подходит для работы и сна.

Atlas Weekend 2019

Уже третий год подряд посещаю фестиваль. Он стал для мене родным местом.

Артисты

За 5 дней фестиваля я был на 12 выступлениях:

  • The Chainsmokers
  • Little big
  • Сплин
  • The Subways
  • Пошлая Молли
  • Tommy Cash
  • The Hardkiss
  • Black eyed peas
  • AS$AP Ferg
  • Chase & Status
  • Ляпис-98
  • Liam Gallagher

Фото

Получилось сделать очень мало фотографий. Часть с мыльница, а часть официальных.

Видео

Официальные видео дневники.
День 1 | День 2 | День 3 | День 4 | День 5 | День 6

Общее впечатление

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

Ну и немного официальной статистики на конец:

  • 538 378 гостей из 75 стран мира за 6 дней фестиваля.
  • более 250 артистов из 20 стран на 20 локациях
  • более чем 30 артистов впервые в Украине
  • более 250 аккредитованных СМИ
  • более 300 часов музыки
  • 250 человек технического персонала и 450 на монтаже/демонтаже конструкций
  • 8 главных сцен общей площадью 1200 кв.м
  • более 3000 осветительных приборов
  • LED-экраны, общей площадью более 1400 кв.м

sleepover.fm

Проект американского музыкального дуета Hammock. Если хочешь расслабиться перед тем как идти спать или просто помечтать/подумать — самое оно!

Слова одного из участников о проекте:

«This music was created for sleep, to be a balm for our restless, troubled minds. The Sleepover Series is very personal to me. I have trouble sleeping... Problems with anxiety and depression. So we made this music. We hope this music helps the listener to take the backward step. A collapse into rest... A gesture of solace.»
-Marc

Ссылка: http://sleepover.fm/

Mubert

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

Очень круто заходит на работе как фоновая музыка.

P.S. 4 пароля от секретных каналов:

  • Tsvetnoy
  • Nitejogger
  • Slova
  • Taetvremya

Годнота, Часть 12

👨🏻‍💻Программирование

🎨Искусство

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

💰Финансы

📷 Интересности

Ранее Ctrl + ↓