【发布时间】:2013-01-04 07:55:15
【问题描述】:
我有一个蛮力算法,但从未完全理解它。我对正在发生的一些事情有一个模糊的把握,但每次我试图准确地跟踪发生的事情时,我都会迷失方向(例如,index 变量有点令人困惑)。也欢迎任何关于如何使算法更高效的提议。
注意 - 我已经有了算法,它可以编译并运行。请不要指责我试图将其用于恶意目的,因为我没有将其用于此目的,而且我从未打算这样做。我只是想知道它是如何工作的。
public class BruteForceTest
{
public String username = new String();
public static String password = "ZZZZZ";
public static char[] charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private static char[] currentGuess = new char[1];
public static void bruteForce()
{
String attempt = new String();
Date start = new Date();
while (true)
{
if (attempt.equals(password))
{
Date end = new Date();
System.out.println("Password: " + attempt + "\nTotal time to crack: " + ((end.getTime() - start.getTime()) / 1000) + " seconds." + "\n");
break;
}
attempt = in.toString();
// System.out.println("Tried: " + attempt);
in.increment();
}
}
public BruteForceTest()
{
Arrays.fill(currentGuess, charset[0]);
}
public void increment()
{
int index = currentGuess.length - 1;
while (index >= 0)
{
if (currentGuess[index] == charset[charset.length - 1])
{
if (index == 0)
{
currentGuess = new char[currentGuess.length + 1];
Arrays.fill(currentGuess, charset[0]);
break;
}
else
{
currentGuess[index] = charset[0];
index--;
}
}
else
{
currentGuess[index] = charset[Arrays.binarySearch(charset, currentGuess[index]) + 1];
break;
}
}
}
public String toString()
{
return String.valueOf(currentGuess);
}
}
【问题讨论】:
-
蛮力不是具体算法的名称。你应该说明你使用这个算法的目的是什么。
-
这是一段简单的 Java 代码。如果你不明白,我建议你从购买一本好的 Java 编程教科书开始。如果您有具体问题,也许我们可以回答。但是“请解释一下”是没有建设性的......
-
@Anony-Mousse - 实际上“蛮力”是 any 算法的名称,它涉及以非智能方式尝试所有可能的候选解决方案。例如,可以(理论上)使用“蛮力”来解决 Soduku ...
-
@Anony-Mousse - 不。 Dijkstra 搜索是针对特定类别问题的特定算法。蛮力是如此通用,以至于它适用于您可以迭代可能的解决方案的任何问题。 (它甚至不需要是一组有限的解决方案......)
-
@StephenC 维基百科教授的“证明”:en.wikipedia.org/wiki/Brute-force_search#Basic_algorithm 我敢打赌,您会发现各种讨论类似“基本蛮力算法”的讲座幻灯片。虽然 Dijkstra 最初是图算法中的最短路径,但它可以用于非常不同的领域,例如查找两个 XML 文档之间的差异(查找)。