Алгоритм топологической сортировки

Алгоритм топологической сортировки работает с DAG (прямой ациклический граф). Смысл топологической сортировки в том, что если какой-либо узел указывает на другой узел, то после него будет идти узел, указывающий на другой узел. Таким образом, в этом случае, если у нас есть циклический граф, мы не можем предсказать, какой узел после какого узла. Вот почему алгоритм топологической сортировки работает только с ациклическим графом, а не с циклическим графом.

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

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

Алгоритм топологической сортировки

 

Шаг 1: мы вставляем те узлы, количество входящих ребер которых равно 0. Таким образом, эти узлы являются узлами 1 и 4.

Алгоритм топологической сортировки

 

Шаг 2:

а. Начнем с узла 1. Мы можем выбрать любой узел между узлами 1 и 4.

б. Мы уменьшаем каждое ребро узла на 1, которое связано с узлом 1. Мы уменьшаем ребро узлов (0, 2 и 3).

в. Мы перемещаем узел 1 из списка в топологически отсортированный список, как показано ниже.

Алгоритм топологической сортировки

 

Шаг 3:

а. Теперь мы исходим из списка, который является Node 4.

б. Мы уменьшаем все исходящие ребра узлов, соединенных с узлом 4, которые являются узлами (0 и 3).

в. Теперь узел 3 не имеет входящих ребер, поэтому мы помещаем его в список, а узел 4 переходит в топологически отсортированный список.

Алгоритм топологической сортировки

 

Шаг 4:

а. Теперь мы исходим из списка, который является узлом 3.

б. Мы уменьшаем все исходящие ребра узлов, соединенных с узлом 3, которые являются узлами (0 и 2).

в. Теперь узлы 0 и 2 не имеют входящих ребер, поэтому мы помещаем их в список, а узел 3 переходит в топологически отсортированный список.

Алгоритм топологической сортировки

 

Шаг 5:

а. Теперь мы исходим из списка, который является Node 0.

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

Алгоритм топологической сортировки

 

Шаг 6:

а. Теперь мы исходим из списка, который является узлом 2.

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

Алгоритм топологической сортировки

 

Шаг 7:

Наконец, мы отсортировали список здесь.

Алгоритм топологической сортировки

 

Алгоритм топологической сортировки

Ниже приведены шаги алгоритма топологической сортировки, которым мы должны следовать.

Шаг 0: Рассчитайте степень вхождения каждого узла графа.

Шаг 1: Сначала нам нужно найти узел, у которого входящие ребра равны нулю.

Шаг 2: мы удаляем этот узел из графа и добавляем его в список топологических порядков сортировки.

Шаг 3: Удалите те узлы, у которых есть исходящие ребра.

Шаг 4: Уменьшите степень вхождения на количество связанных ребер, которые были удалены.

Шаг 5: Повторяйте шаги 1–4, пока не останется узлов с нулевой степенью вхождения.

Шаг 6: Убедитесь, что все элементы расположены в правильной последовательности.

Шаг 7: Теперь мы отсортировали заказ из шага 6.

Шаг 8: Положите конец алгоритму.

 

Код Python : ниже приведена реализация приведенного выше примера на Python.

 

fromcollectionsimportdefaultdict



classbuildGraph :



def__init__(self, nodes : int) :

self.nodes= nodes



# Теперь мы сохраняем граф в формате смежного списка

self.adjListDetails=defaultdict(list)



# Он будет хранить информацию о входящих

ребрах определенного узла 



# в самом

self.count_numbers_of_incoming_edge_of_a_node= []



# Мы сохраняем отсортированные узлы в топологическом порядке

self.topological_sorted_order= []



# Мы храним информацию обо всех тех узлах, которые

# не имеют входящих ребер в графе

self.nodes_have_zero_incoming_edges= []



# Теперь мы создаем смежный список всех графов для сортировки

defAddGraphEdge (self, source :int, destination : int) :

self.adjListDetails[source].append(destination)

self.count_numbers_of_incoming_edge_of_a_node[destination] +=1



defTopologicalSortAlgorithm (self) :



for node inrange(self.nodes) :

ifself.count_numbers_of_incoming_edge_of_a_node[node] ==0 :

self.nodes_have_zero_incoming_edges.append(node)



whileself.nodes_have_zero_incoming_edges :

self.nodes_have_zero_incoming_edges.sort()

            source =self.nodes_have_zero_incoming_edges.pop(0)



# итерация по соседнему списку

if source inself.adjListDetails :

for node inself.adjListDetails[source] :

self.count_numbers_of_incoming_edge_of_a_node[node] -=1

ifself.count_numbers_of_incoming_edge_of_a_node[node] ==0 :

self.nodes_have_zero_incoming_edges.append(node)



self.topological_sorted_order.append(source)



print("Топологический порядок сортировки: "+str(self.topological_sorted_order))



defmain() :



number_of_nodes=7

    graph =buildGraph(number_of_nodes)

graph.count_numbers_of_incoming_edge_of_a_node= [0] *number_of_nodes



graph.AddGraphEdge(0,2)

graph.AddGraphEdge(0,5)

graph.AddGraphEdge(1,3)

graph.AddGraphEdge(1,6)

graph.AddGraphEdge(2,4)

graph.AddGraphEdge(3,5)

graph.AddGraphEdge(5,2)

graph.AddGraphEdge(5,4)

graph.AddGraphEdge(6,2)



graph.TopologicalSortAlgorithm()



if __name__ =="__main__" :

main()

 

 

Выход:

Топологический порядок сортировки: [0, 1, 3, 5, 6, 2, 4]

 

Временная сложность алгоритма топологической сортировки:

Общее время обработки алгоритма равно O (E + N), где E представляет количество ребер, а N представляет количество узлов в графе. Затем, на следующем шаге, мы должны вычислить степень входа каждого узла, что обычно занимает O(E) раз, а затем поместить все эти узлы в отсортированный список, где их степень входа равна нулю, что занимает O(N) раз. раз. Таким образом, общая временная сложность алгоритма топологической сортировки составляет O (E+N).

Но пространственная сложность алгоритма топологической сортировки составляет O (N), что равно общему количеству узлов в графе.

 

Применение:

  1. Топологическая сортировка очень полезна для нахождения цикла графа.
  2. Алгоритм топологической сортировки используется для определения условий взаимоблокировки в операционной системе.
  3. Алгоритм топологической сортировки используется для поиска кратчайшего пути во взвешенном ациклическом графе.

 

Вывод :

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



2022-03-19T18:03:01
Программирование

Как выбрать кошелек для ERC-20 токенов

Кошельки для виртуальной валюты можно поделить на 5 разновидностей:

  • Интернет-кошельки. Это особый online-сервис, где можно разместить свою виртуальную валюту. В связи с тем, что подобное хранилище сберегает секретные шифры в режиме online, то его владельцы способны проще и оперативнее осуществлять транзакции. Это его главное достоинство. Вместе с тем их могут легко взломать злоумышленники. Это «MyEtherWallet», «MetaMask», «Scatter».
  • Локальные (настольные) хранилища виртуальных средств – это особое приложение, устанавливаемое на ПК. Они обладают серьезной степенью безопасности, т.к. сведения сохраняются прямо у пользователя на жестком диске. Есть 2 разновидности локальных хранилищ: «тонкий» и «толстый». В последнем случае требуется загрузить Blockchain, который постоянно станет обновляться, в связи с чем понадобится большой объем незанятого пространства. «Тонкое» денежное хранилище не нуждается в загрузке всей цепочки блоков. Вместе с тем по причине этого снижается его защищенность, поскольку кошелек станет считывать всю информацию с иных ресурсов. К десктопным кошелькам относятся: «Exodus», «Altcoin.io», «SimplEOS», «Greymass eos-voter».
  • Хардварные. Приспособления, предлагающие наиболее надежный способ размещения виртуальной валюты. В связи с тем, что приспособление схоже с «флешкой», его довольно комфортно эксплуатировать и всегда брать в дорогу. До использования хардварного денежного хранилища его следует присоединить к ПК. Подобный кошелек бережет секретные пароли не на слабозащищенных устройствах, функционирующее во всемирной паутине, а в защищенной среде денежного хранилища. При хищении средств, поломке либо утрате кошелька, его можно без труда восстановить посредством особого шифра, генерирующегося при установке денежного хранилища. Кроме того, данную разновидность кошельков можно просто и оперативно отрегулировать. Таким кошельком является «Ledger Nano S».
  • Виртуальное денежное хранилище для смартфонов. Особое приложение, инсталлирующееся на сотовый телефон. Весьма комфортно для повседневной эксплуатации, т.к. телефон всегда можно иметь под рукой и в случае необходимости осуществить требующуюся валютную операцию. У данной разновидности хранилищ криптовалюты средняя степень защищенности, поскольку программа применяет посторонние дистанционные хранилища данных. Мобильным кошельком является «Infinito Wallet».
  • Бумажные хранилища виртуальной валюты. Они представляют собой бумагу, на которой находятся дубликаты открытых и закрытых паролей. На особом портале создается адрес виртуальных денежных средств и генерируется изображение, обладающее 2-мя QR-шифрами. Посредством одного есть возможность получать электронные деньги, а другой представляет собой секретный пароль, необходимый для перечисления криптовалюты. Поскольку подобный кошелек не подключен к всемирной паутине и данные не находятся на ПК, то троянские программы или хакеры не могут до них добраться. Вместе с тем подобную бумагу следует защищать от повреждений (влаги, огня и др.). Его могут выкрасть не компьютерные, а обыкновенные воры.

Читать

Intel начинает инвестировать 80 миллиардов евро в ЕС с созданием полупроводникового мегасайта в Германии

Intel подтвердила планы по строительству производственной «мега-площадки» в Магдебурге, Германия, стоимостью 17 миллиардов евро.

Это объявление является частью планов Intel по обеспечению гораздо большего присутствия на континенте, при этом чиповый гигант инвестирует 80 миллиардов евро в Европу в течение следующего десятилетия. Эта новость появилась всего через несколько месяцев после того, как Intel объявила об открытии еще одного мегасайта стоимостью 20 миллиардов долларов в штате Огайо , США.

Первый этап включает в себя два передовых завода по производству полупроводников в Магдебурге, планирование которых начнется немедленно, а строительство, как ожидается, начнется в первой половине 2023 года. Хотя ожидается, что заводы не будут введены в эксплуатацию до 2027 года, они будут использовать транзисторные технологии Intel эпохи Angstrom. и стремиться обслуживать ряд литейных клиентов в дополнение к собственным процессорам Intel.

Предполагается, что в ходе строительства на площадке, именуемой «Silicon Junction», будет создано 7000 рабочих мест в сфере строительства, 3000 постоянных рабочих мест в Intel и десятки тысяч дополнительных рабочих мест у поставщиков и партнеров.

Помимо Германии, планы Intel в ЕС также включают новый центр исследований и разработок на плато-де-Сакле, Франция. Intel цитирует Францию ​​как свою «европейскую штаб-квартиру высокопроизводительных вычислений и искусственного интеллекта», и в течение следующих двух лет на сайте будет создано 450 вакансий.

Дальнейшее производство и литейные услуги в Ирландии, Италии, Польше и Испании также предназначены для расширения. Производство полупроводников стало горячей темой после глобального дефицита, и растущие амбиции Intel четко совпадают с введением Закона ЕС о микросхемах.

Пэт Гелсингер, генеральный директор Intel, сказал: «Наши запланированные инвестиции — важный шаг как для Intel, так и для Европы. Закон ЕС о чипах даст возможность частным компаниям и правительствам работать вместе, чтобы радикально улучшить позиции Европы в полупроводниковом секторе».

«Эта обширная инициатива будет стимулировать инновации в области исследований и разработок в Европе и принесет в регион передовые производства на благо наших клиентов и партнеров по всему миру. Мы стремимся играть важную роль в формировании цифрового будущего Европы на десятилетия вперед».

В рамках амбициозного «цифрового десятилетия» блока Европа планирует к 2030 году обеспечить 20% мирового производства полупроводников. Приверженность Intel будет рассматриваться как важный шаг на пути к этой цели.



2022-03-17T21:05:49
Бизнес

Конвертация vmdk и ova (VMWare) в qcow2 (KVM)

Инструкция по конвертации образов виртуальных машин VMWare для использования на гипервизоре KVM (чистом или Proxmox VE). Дополнительные пакеты не требуются, если конвертация производится на самом KVM, в противном случае требуется установить пакет qemu-utils:
Читать

Простая Математика для Простых Программистов

Простая Математика для Простых Программистов

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

Материал представлен в самом простом и правильном для немедленного употребления программистом изложении.

Настоящее применение математики программистом начинается тогда, когда он, имея перед собой задачу, сам, без ансамбля, догадывается, какую именно отрасль математики надо для такого случая вспомнить, какой конкретно метод из неё взять и как его запрограммировать. И всё это сам, без посторонней помощи. Читать

Как восстановить программное обеспечение стиральной машины

Современная техника становится все более умной. В каждом бытовом приборе стоит электронный модуль управления. Теперь для каждой модели посудомоечной, сушильной машины или стиральной машины пишется свое программное обеспечение. По заверением представителя сервисного цента ремонта бытовой техники, которая производит ремонт стиральных машин в Красногорске, производители техники очень заинтересованы в конечном итоге: чтобы пользователю было удобно пользоваться изделиями выпускаемые фирмой. Совсем недавно в продаже появились стиральные машины серии SMART. Эти изделия удобны тем. что ими можно управлять со смартфона. Можно даже заранее запрограммировать выполнение определённых программ. Стирка запустится в определённое время и постирает белье.

Всеми этими процессами управляет блок управления стиральной машины. В нём зашита специальная программа. К слову сказать, данные программ стиральных машинах не очень защищены от скачков напряжения. Даже может стереться программа из памяти ПЗУ, даже если рядом будет разряд молнии, а машинка в это время работала. Для того, чтобы восстановить программное обеспечение, придётся обращаться в сервисный центр. Или вызывать мастера на дом, чтобы он провёл ремонт стиральной машины в домашних условиях. В некоторых моделях реализована простая функция перепрограммирования. Можно не привозить стиральную машину в мастерскую: мастер приедет со специальным оборудованием, подключит компьютер к стиралке и «зальет» программу управления в электронный блок.

Сложность программирования блока управления стиральной машиной

Некоторые модели бюджетных стиральных машин можно без особых усилий перепрошить даже самостоятельно. Достаточно купить специальный шлейф для соединения разъёма в машинке и ноутбука. Скачать специальную программу и перепрограммировать устройство. Некоторые производители бытовой техники например Бош и Сименс не выкладывают в свободном доступе свое программное обеспечение. Это считается интеллектуальной собственностью фирмы и имеется только авторизованных сервисных центрах. Так что при ситуациях, когда программа «слетела», придётся обращаться только к официальным представителям данной фирмы вашем регионе. Если вам нужен ремонт стиральной машины в Нахабино — обращайтесь в эту фирму.

Причины по которым ломается блок управления в стиральной машине

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

 

Цены

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



2022-03-14T22:02:30
Программное обеспечение