我一直在编写解决各种数字难题的程序,但我一直在设计无法合理的复杂搜索算法.
例如,在一个谜题中,您将获得一个3x3网格,数字1到9如下:
123
456
789
Run Code Online (Sandbox Code Playgroud)
您可以在任何方向上循环任何行或列中的数字.下面是将顶行数字向右移动的示例.如果它们位于网格的边缘,则数字将循环.
123 -> 312
456 456
789 789
Run Code Online (Sandbox Code Playgroud)
您必须以这种方式移动数字,直到创建一个魔术方块,其中每列,行和对角线中的数字总和为15.
我编写了一个DFS强力算法来测试所有可能的移动序列,尽管每个回合的可用移动次数呈指数增长(大约12 ^ [当前转弯]),使其无用.
看起来BFS最适合找到正确的动作,但这需要我存储数百甚至数千个网格副本才能回溯!
我一直遇到这些问题.BFS和DFS算法分别使用太多的内存和时间.我需要帮助优化这些算法,以便它们更快更有效地运行.也许识别数字的模式和关系或者让算法逻辑朝着目标努力会有所帮助吗?(我不知道会带来什么).
编辑:
我的固定算法就像一个魅力.学习如何对我的排列进行编号是至关重要的.谢谢你们!
在MySQL中,QUOTE()
和之间有什么区别mysql_real_escape_string()
?从MySQL文档中,我知道以下内容:
引用()
mysql_real_escape_string()
QUOTE()
忽略日志,是否有助于转义\n
和\r
字符?有了这两个功能,客户端/服务器功能效率有差异吗?mysql_real_escape_string()
如果开发人员在将转义字符串输入查询之前处理它是合乎需要的,那么这听起来很有用.但是,是否QUOTE()
提供最安全可靠的字符串转义方法?
我想知道是否应该使用QUOTE()
所有语言的所有查询,并忘记使用特定于语言的函数转义字符串.
我正在使用LuaJ在Java中运行用户创建的Lua脚本.但是,运行永不返回的Lua脚本会导致Java线程冻结.这也使线程不可中断.我运行Lua脚本:
JsePlatform.standardGlobals().loadFile("badscript.lua").call();
Run Code Online (Sandbox Code Playgroud)
badscript.lua
包含while true do end
.
我希望能够自动终止陷入不屈服循环的脚本,并允许用户在运行时手动终止他们的Lua脚本.我已经阅读了有关debug.sethook和pcall的内容,但我不确定我是如何正确地将它们用于我的目的.我也听说沙盒是一个更好的选择,虽然这有点超出我的范围.
这个问题也可能仅扩展到Java线程.我没有找到任何有关中断Java线程的确切信息while (true);
.
在线Lua的演示是非常有前途的,但似乎的检测和"坏"的脚本终止在CGI脚本,而不是Lua中完成.我是否可以使用Java来调用CGI脚本,该脚本又调用Lua脚本?不过,我不确定是否允许用户手动终止他们的脚本.我丢失了Lua演示源代码的链接,但我手头有它.这是神奇的路线:
tee -a $LOG | (ulimit -t 1 ; $LUA demo.lua 2>&1 | head -c 8k)
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
一些来源:
algorithm ×1
c ×1
c++ ×1
interrupt ×1
java ×1
lua ×1
luaj ×1
magic-square ×1
mysql ×1
optimization ×1
performance ×1
search ×1