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

Позднее Ctrl + ↑

Изучение SQL: рекурсивные запросы

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

Общий вид рекурсивного запроса

WITH <имя> (<список столбцов>)
AS (
	SELECT    -- анкорная часть
	UNION ALL -- рекурсивная часть
        SELECT FROM <имя>
        WHERE <условие продолжения интерации>
)

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

Пример 1
У нас есть табличка, в которой лежат сотрудники, у каждого сотрудника есть руководитель, который указывается в колонку ParentId. Нам надо найти менеджера, в непрямом подчинении которого есть указанный нами человек.

Наполнение таблицы.

Код запроса:

;WITH OrgStructure AS 
(
	SELECT Id, ParentId, EmployeeType, EmployeeName
	FROM Employees
	WHERE EmployeeName = 'Jim' -- отправная точка, нам надо найти менеджера сотрудника Jim

	UNION ALL

	SELECT e.Id, e.ParentId, e.EmployeeType, e.EmployeeName
	FROM Employees as e
	JOIN OrgStructure as os
	ON e.Id = os.ParentId
)

SELECT * FROM OrgStructure
WHERE EmployeeType = 'manager' -- указываем что мы ищем менеджера.

Пример 2
Найдем первые 10 чисел Фибоначчи:

;WITH FIBONACHI AS 
(
	SELECT
		1 Iteration,
		1 SecondValue,
		2 CurrentValue
	UNION ALL

	SELECT
		Iteration + 1,
		SecondValue = CurrentValue,
		CurrentValue = SecondValue + CurrentValue
	FROM FIBONACHI
	WHERE Iteration < 10
)
SELECT CurrentValue FROM FIBONACHI

Kodak Pro Foto 100 (просрочка 2009)

Наверное самая приятная особенность данной пленки это очень широкий динамический диапазон. Также видел в интернете много мнений, что эта пленка очень хорошо подходит что Ч/Б фото. Отсняли → отсканировали → обесцветили. Снимал на Nikon N65.

GIN индекс

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

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

Хорошая аналогия для этого метода — алфавитный указатель в конце книги, где для каждого термина приведен список страниц, где этот термин упоминается.

Алгоритм поиска Ли

Алгоритм поиска пути в планарном графе. Зачастую используется в схемотехнике и в играх (стратегиях) для поиска кратчайшего пути.

Алгоритм состоит из 3 шагов:

  1. Инициализация
  2. Распространение волны
  3. Восстановление пути

Также есть 2 способа поиска пути: ортогональный и ортогонально-диагональный. Ниже на скриншотах можно увидеть работу этих двух способов.

Ортогональный поиск.
Ортогонально-диагональный поиск.

Псевдокод

Взято из Википедии.

Инициализация

Пометить стартовую ячейку 
d := 0

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

ЦИКЛ
  ДЛЯ каждой ячейки loc, помеченной числом d
    пометить все соседние свободные непомеченные ячейки числом d + 1
  КЦ
  d := d + 1
ПОКА (финишная ячейка не помечена) И (есть возможность распространения волны)

Восстановление пути

ЕСЛИ финишная ячейка помечена
ТО
  перейти в финишную ячейку
  ЦИКЛ
    выбрать среди соседних ячейку, помеченную числом на 1 меньше числа в текущей ячейке
    перейти в выбранную ячейку и добавить её к пути
  ПОКА текущая ячейка — не стартовая
  ВОЗВРАТ путь найден
ИНАЧЕ
  ВОЗВРАТ путь не найден

Пример кода, который реализует алгоритм и выводит на экран путь (C#).

Polaroid High Definition 200 (просрочка 2002)

Во время очередного поиска ништяков на барахолке OLX наткнулся на вот эту пленочку. Как оказалось, в интернете не так много информации о ней. И вообще мало кто знает что Polaroid выпускал свою 35мм пленку. Решил купить одну катушку и протестировать. Так как эта пленка больше не производится, то мой экзепляр нужно было проявить до 2002 года. Продавец уверял что хранил ее в холодильнике — будем снимать по номиналу.

Краткие характеристики

  • ISO 200
  • Кол-во кадров 24
  • Снимал на Konica Autoreflex T3

Фото

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

Попробовал отредактировать одну фотографию с помощью стандартной программы «Фото» на маке. Хотел убрать этот зеленоватый оттенок и шум. Как по мне, получилось неплохо.

Контейнер для хранения пленки

Куда бы я не ехал я всегда беру с собой несколько катушек пленки. Зачастую они у меня разбросаны по всему рюкзаку, что неудобно. Погуглив немного, нашел вот такой симпатичный контейнер на 10 пленок. Занимает мало места и теперь вся пленка лежит в одном месте.

Ссылка на eBay

Хеш-таблица

Хеш-таблица — специальная структура данных, в которой данные хранятся в виде хеш — значение. Очень похожа на словарь, но в ее основе используется хеш функция для ускорения поиска.

Есть два основных способа реализации хеш-таблицы:

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

В .NET уже существует готовая реализация этой структуры: System.Collections.HasTable. Но с появлением обобщенных коллекций стал устаревшим. На его место пришел словарь — Dictionary. Так как в базовом объекте есть 2 метода Equal и GetHashCode мы можем в качестве ключа словаря использовать любой тип данных.

Fujifilm Superia 100 (просрочена 2012 год.)

Нашел в закромах катушку Fujifilm Superia 100. Отснял на Konica Autoreflex T3. Из минусов могу отметить только низкое ISO, мне было достаточно тяжело фотографировать в сложных условиях освещения.

Результат

Ранее Ctrl + ↓