Алгоритм Brute-Force в C#

В этой статье мы узнаем о реализации алгоритма в C# Brute-Force. Brute-force search или исчерпывающий поиск, также известный как генерация и тест, является очень общей методикой решения проблем, которая состоит в систематическом перечислении всех возможных кандидатов для решения и проверяя, удовлетворяет ли каждый кандидат утверждение проблемы.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace BruteForceAlgorithm
{
    class BruteForceAlgo
    {
 
        public delegate bool BruteForceTest(ref char[] testChars);
 
        public static bool BruteForce(string testChars, int startLength, int endLength, BruteForceTest testCallback)
        {
            for (int len = startLength; len <= endLength; ++len)
            {
                char[] chars = new char[len];
 
                for (int i = 0; i < len; ++i)
                    chars[i] = testChars[0];
 
                if (testCallback(ref chars))
                    return true;
 
                for (int i1 = len - 1; i1 > -1; --i1)
                {
                    int i2 = 0;
 
                    for (i2 = testChars.IndexOf(chars[i1]) + 1; i2 < testChars.Length; ++i2)
                    {
                        chars[i1] = testChars[i2];
 
                        if (testCallback(ref chars))
                            return true;
 
                        for (int i3 = i1 + 1; i3 < len; ++i3)
                        {
                            if (chars[i3] != testChars[testChars.Length - 1])
                            {
                                i1 = len;
                                goto outerBreak;
                            }
                        }
                    }
 
                outerBreak:
                    if (i2 == testChars.Length)
                        chars[i1] = testChars[0];
                }
            }
 
            return false;
        }
 
 
        static void Main(string[] args)
        {
            BruteForceTest testCallback = delegate(ref char[] testChars)
            {
                var str = new string(testChars);
                return (str == "bbc");
            };
 
 
            bool result = BruteForce("abcde", 1, 5, testCallback);
            Console.WriteLine(result);
        }
    }
}

Вывод:

True

Источник: http://www.csharpstar.com/csharp-brute-force-algorithm/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 3,00 из 5)
Adblock
detector