
Size: a a a
This paper presented an in-depth analysis of 198 user-reported failures in five widely used, data-intensive distributed systems in the form of 12 findings. We found that the error manifestation sequences leading to the failures to be relatively complex. However, we also found that for the most catastrophic failures, almost all of them are caused by incorrect error handling, and 58% of them are trivial mistakes or can be exposed by statement coverage testing.
1
и 0
("суша" и "вода" соответственно), требуется подсчитать количество связных (в смысле окрестности фон Неймана) областей из единиц. Простейший способ решить задачу — это бахнуть depth first search (и в силу того, что вход дан как Vec<Vec<char>>
, его даже можно спокойно менять), но этот вариант я сразу отмёл — ведь это же медленно, это же надо прыгать нелинейно по памяти и портить кеш (не говоря уже о том, что там нужно возиться с индексами, что я страшно не люблю делать)! Так что я решил пойти умным путём и решить задачу путём однократного сканирования каждой строки.#..#Видите ли вы тут проблему? Я вот понял её благодаря своему отладочному выводу. Перерисуем этот пример, показав, какой номер территории приписывается каждой ячейке на очередном шаге:
#.##
###.
0..1Во время обработки второй строки появляется территория с id = 2, которая сразу же становится частью территории с id = 1. После обработки второй строки связи между территориями выглядят следующим образом (стрелочкой показано отношение "является частью"):
0.21
000.
[ 0 | 1 | 2 ]С другой стороны, во время обработки третьей строки эта же территория становится частью территории с id = 0, и в итоге связи становятся такими:
^ |
| |
\---/
[ 0 | 1 | 2 ]Здесь и кроется проблема: так как у территории с id = 1 нет никаких связей, она считается отдельным островом, а не частью острова, образованного территорией с id = 0. В итоге алгоритм ошибочно считает, что на карте два острова вместо одного. В принципе, тут примерно понятно, что нужно исправить: нужно менять не только связь у территории 2, но и у территории 1, на которую первая указывает...
^ |
| |
\-------/