У всех вас, должно быть, был хотя бы один момент в своей жизни, когда вы не могли найти эту маленькую, но действительно важную вещь, например, этот Pen-drive, в котором хранятся все ваши фотографии из отпуска, или тот счет, который вы держали на гарантии, это кольцо вы любите носить и т. д., и чтобы обнаружить, что вы перебираете почти все свои вещи туда и обратно, только чтобы найти их в том месте, где вы меньше всего этого ожидали, через 20 минут.
Теперь представьте ту же ситуацию с компьютером; Вы вводите все, что ищете, в строку поиска Google, и Google "волшебным образом" находит то, что вы ищете, в течение нескольких миллисекунд. В качестве дополнительного преимущества он также сортирует результаты по их важности и достоверности.
Простой поисковый запрос «Facebook» в Google дает около 17 40 000 000 результатов за 0,33 секунды.
Тогда давай сравним.
Вам потребуется 20 минут, чтобы найти что-то примерно из 100 вещей, в то время как компьютеру потребовалось 0,33 секунды, чтобы найти 17 40 000 000 000 вещей из, казалось бы, бесконечного количества результатов по всему Интернету.
Итак, помимо всех мощных машин, алгоритмов и ботов, на которых работает поисковая система Google; фундаментальное отличие состоит в том, что вы не знали, где хранилась вещь, поэтому вам приходилось просматривать каждый из 100 предметов один за другим, чтобы найти то, что вы искали.
Google знал точно, где хранятся все его результаты по запросу «Facebook», поэтому оставалось только отобразить всю информацию для вас.
Все это приводит только к одному - договоренности.
Вот что такое структуры данных.
Точно и по делу.
«Структура данных - это особый способ организации данных на компьютере, чтобы его можно было эффективно использовать».
Когда вы ищете изображения милых котят, поисковые системы не просматривают изображения суперкаров и не отбрасывают их, поскольку они не являются котятами. Мы, люди, поступили бы именно так.
Мы буквально пролистали каждую страницу фотоальбома, чтобы найти ту идеальную свадебную фотографию или этот потрясающий пейзаж.
В этом разница между мышлением компьютера и человеческого мозга.
Идеальной структурой данных для этой проблемы было бы пометить каждую фотографию подписью и подготовить индексную страницу с подписью и местоположением фотографии.
Но не все, что можно сделать, нужно делать. Одно из важных применений структур данных - это экономия времени.
Две причины, почему я считаю это плохой идеей.
- Время, потраченное вами на расстановку картинок, будет больше, чем время, которое вы сэкономите благодаря этому.
- Будет потеряна радость просматривать каждую картинку и вспоминать стоящую за ней историю, переживать ее заново.
У людей не может быть идеального порядка в нашей жизни, нам нужен хаос, чтобы выжить.
И это то, что отличает нас от машин, которые мы построили.
Сходства с физическим миром.
Почти каждая структура данных основана на реальной жизни или может быть связана с ней. Некоторые из них даже названы в честь аранжировки, в которой они созданы.
Вот несколько структур данных, которые мне кажутся забавными, и их физические представления.
Массив - это ряд элементов в определенном порядке, обычно все одного типа. Доступ к элементам осуществляется с помощью целочисленного индекса, чтобы указать, какой элемент требуется. Массив может быть физически связан с ежедневным дневником, отчеты последующих дней записываются на последующих страницах в последовательном порядке. Каждая страница пронумерована, и вы можете получить доступ к любой странице, просто зная номер страницы.
Связанный список (также называемый просто списком) - это линейный набор элементов данных любого типа, называемых узлами, где каждый узел имеет значение и указывает на следующий узел в связанном списке. Это может быть физически связано с набором подсказок из игры «Охота за сокровищами». Каждая подсказка содержит сообщение подсказки, а также местоположение следующей подсказки.
Модель Реляционная база данных организует данные в одну или несколько таблиц (или «отношений») столбцов и строк с уникальным ключом, идентифицирующим каждую строку. Это похоже на индексную страницу любой записной книжки. Где заголовки, даты, время и т. Д. Хранятся в столбцах, а каждая строка изменяется порядковым номером.
Первым пришел - первым обслужен или FIFO, метод организации и управления буфером данных, при котором в первую очередь обрабатывается самая старая (первая) запись или «заголовок» очереди. . FIFO может относиться к очереди на покупку билетов в кино, в которой первым обслуживается тот, который пришел первым.
Последний вошел - первым ушел или LIFO, где в первую очередь обрабатывается самая младшая запись или «верх стека». Представьте себе стопку посуды, при мытье посуды одну за другой вы будете мыть посуду, которую вы сложили последней, первой.
Граф - это набор узлов, называемых вершинами, и связей между ними, называемых ребрами. Узлы содержат информацию, а ребра соединяют все остальные связанные с ними узлы. Иногда края тоже взвешиваются в соответствии с их важностью. Графики похожи на то, что детективы используют в фильмах. Каждая фотография или имена связаны друг с другом с помощью булавки и нити. Использование ниток разного цвета определяет важность этой ссылки.
Процесс.
Как видите, существует множество моделей баз данных.
Определить, какую базу данных использовать на основе типа данных, - довольно сложный процесс для программиста.
Чтобы понять это, представьте, что вам дается задание расставить все предметы в доме случайного незнакомца. Перед вами будет огромная куча всего, что они используют, и вы не знаете, с чего начать.
Теперь вы можете просто брать случайные предметы и складывать их в случайные места, например, ставить зубные щетки возле входа и зубную пасту на кухне. Теперь даже это было бы структурным расположением, но не совсем оптимальным.
Вы можете начать с разделения всех предметов на группы в зависимости от их использования и поместить каждую группу предметов в комнату.
Вы можете отсортировать предметы по частоте использования и поместить наиболее часто используемые предметы в наиболее доступные места и наименее часто используемые предметы на хранение.
Вы можете сначала расставить такие детали, как мебель, а потом другие детали и украшения.
Каждая договоренность повлияет на образ жизни этого незнакомца.
Даже для расстановки предметов домашнего обихода существует так много разных методов, теперь представьте то же самое для веб-сайта с огромной базой данных, такого как Facebook.
Каждый участник, их друзья, страницы, которые им нравятся, где они ходили в школу, фотографии, которые они загрузили, фотографии, на которых они отмечены, и т. Д. Все это должно быть организовано некоторым образом, который прост в исполнении, а также одинаково эффективный. Все это полностью структурировано с использованием простых структур данных, о которых я упоминал выше. Раньше Facebook использовал реляционные базы данных, где каждый участник представлял собой строку, а каждое взаимодействие добавлялось в новый столбец. Но теперь Facebook использует базы данных Graph, каждый пользователь является узлом, а каждое взаимодействие - новым узлом, и оба они связаны с помощью взвешенных ссылок, которые также помогают сортировать их по важности.
Так сложно и в то же время так просто!
Процесс организации чего-либо по понятным причинам сложен и занимает много времени, но оно того стоит: вид чего-то, что раньше было полным беспорядком, а теперь рассортировано по организованным, управляемым частям, действительно красиво!