Ранее‹‹здесь мы говорили об основах и о том, насколько они важны при создании реальных приложений. Мы создали класс Node на JavaScript и рассказали о том, как это может помочь нам заменить встроенную структуру данных Array []. Мы также говорили об ограничениях массивов и о том, как мы попытаемся преодолеть эти препятствия.

Наша реализация Node была многообещающей, но мы начали реализовывать вариант связанного списка. Связанные списки великолепны, но у них также есть серьезные ограничения, как и у массивов. Хотя он преодолевает неспособность массивов добавлять к началу, не вызывая хаоса, стоящего нам большого значения, он все еще сдерживается временем, необходимым для поиска данных; Связанные списки необходимо перебирать, чтобы найти элементы. Гипотетически, если то, что вы хотите, отсутствует, вам придется перебирать весь список, что будет стоить вам bigO (n), где n - длина списка. Итак, давайте изменим наш узел, чтобы он не имел указателей на соседний узел. Вместо этого давайте просто добавим нашему узлу свойство «connections». Мы будем использовать массив для хранения наших соединений. Это имеет смысл, как будто дом знает, какие у него соседние дома, а вы знаете, кто ваши друзья. Но это всего лишь строительный блок большей структуры данных.

Как мы упоминали ранее, узлы — это строительные блоки, из которых мы строим дом. Вместо связанного списка, который ломается даже по временной сложности с массивами (помните, что вы можете очень быстро находить вещи с массивами, но вы не можете добавлять в начало без временных затрат), давайте сделаем график.

Графики очень полезны и широко используются в производстве. Это интуитивно понятно, потому что программное обеспечение должно моделировать реальный мир, а графики есть везде. Город может быть графом, где здания являются узлами, а дороги — соединениями, так же как здание имеет графоподобное свойство, где узлы — это комнаты, а соединения — залы. У нас будет свойство Id для каждого узла, и мы можем использовать его как ошейник владения. Это означает, что узел будет иметь отношение имеет и принадлежит многим (ресурс rails, однако знания по-прежнему применимы) с другими узлами на графике. Если у меня будет моя собака, я надену на нее ошейник. Это скажет другим, что это моя собака. Наоборот, у моей Собаки есть создание, что у меня есть отношение владельца к ней. Мы сможем использовать идентификаторы для поиска других узлов и даже увидеть, как они связаны с другими узлами. Давайте напишем класс Graph.

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

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

Мы также дадим ему возможность удалять узлы и, наконец, редактировать узлы. Эффективно сделаем CRUD Graph.

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