Почему VS 2008 sp1 устанавливает аварийное прекращение работы на Win7 RC?

С помощью сканирования вы можете найти все пересечения между вертикальными и горизонтальными линиями. Пройдите все строки в порядке увеличения y. Поддерживать буфер, содержащий все вертикальные линии, включая текущее значение y. Сохраняйте буфер отсортированным по значению x для каждой вертикальной линии. Когда вы подходите к каждой горизонтальной линии, проверьте, не пересекает ли она какую-либо из строк в буфере. В худшем случае это происходит при наличии O (N ^ 2) пересечений.

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

Теперь возьмем каждое пересечение и предположим, что это нижний левый угол прямоугольника. Для каждого пересечения над ним на его вертикальной линии посмотрите на пересекающуюся горизонтальную линию и найдите крайнюю правую точку на этой линии, где вы можете спуститься хотя бы до пересечения. Вы построили дерево, которое позволяет вам находить это по времени логарифмически по количеству пересечений на этой линии: начните с вершины дерева и идите направо, если значение у этого потомка хотя бы настолько далеко, насколько вам нужно, остальное иди налево. Нахождение этого дает вам наибольший прямоугольник, используя эту левую нижнюю границу и эту горизонтальную линию, поэтому проверка этого для каждой горизонтальной линии дает вам наибольший прямоугольник, включая это пересечение как нижний левый, и повторение этого для каждого пересечения дает вам общий наибольший прямоугольник. [112 ]

Если линии образуют сетку N x N, то для каждого пересечения вы проверяете горизонтальные линии O (N) над ним по стоимости O (log N), поэтому общая стоимость этого этапа составляет O (N ^ 3log (N)). в худшем случае.

18
задан Eric Schoonover 4 May 2009 в 00:43
поделиться

2 ответа

while installing Visual Studio 2008 SP1 on Windows 7 RC 7100, run this as administrator:

reg delete HKLM\SOFTWARE\Microsoft\SQMClient\Windows\DisabledSessions /va /f

Afterwards Visual Studio 2008 SP1 will install correctly.

I copied this from the original question, just to make it a proper question/answer... marked as community wiki

2
ответ дан 30 November 2019 в 09:46
поделиться

Вы должны быть получены из Panel или PictureBox.

Это имеет ряд последствий в зависимости от того, как вы решили включить буферизацию.

Если вы установите флаг this.DoubleBuffer, то все будет в порядке.

Если вы вручную обновляете стили, вам нужно нарисовать форму самостоятельно в WM_PAINT.

Если вы действительно чувствуете амбициозность, вы можете сохранить и нарисовать свой собственный задний буфер в виде растрового изображения.

0
ответ дан 30 November 2019 в 09:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: