惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
博客园 - 叶小钗
小众软件
小众软件
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
Last Week in AI
Last Week in AI
量子位
腾讯CDC
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
爱范儿
爱范儿
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
V
V2EX
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
K
Kaspersky official blog
Vercel News
Vercel News
L
LINUX DO - 热门话题
The Hacker News
The Hacker News
The Register - Security
The Register - Security
IT之家
IT之家
C
Cybersecurity and Infrastructure Security Agency CISA
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
N
News | PayPal Newsroom
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Attack and Defense Labs
Attack and Defense Labs
S
Securelist
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
H
Hacker News: Front Page
博客园 - 聂微东
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
I
InfoQ
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
PCI Perspectives
PCI Perspectives

博客园 - 空空色色

转一篇,CentOS后台服务配置 linux kernel 2.6.36 编译升级 linux的UPNP支持(转) UPNP协议细节(转) UPnp协议 from wikipedia 考察智力zz JScollPane以及JPanel相关 bmp文件格式 java中对图象文件的处理(读写以及转换) Java媒体框架(JMF),个人很欣赏.... 常用颜色对照表 YUV/YIQ色彩空间的转换 关于Swing实现透明窗体的。我也很喜欢,收藏! java中的数据库程序应用 A*以及迭代加深的A*算法(IDA*) 我的兄弟们之袋鼠篇 我的兄弟们之温J篇 java中的图象处理技术基础 经典搜索算实现之一,广度优先.
深度优先状态搜索法
空空色色 · 2006-11-04 · via 博客园 - 空空色色

      继续未完成之事业.
      今天我们要讲的是深度优先搜索,还是以8数码问题为背景.
      简单的说,深度优先就是沿着一条路径走到底,对于8数码的问题,由于空格只能上下左右的移动(有时候也不全然),因此每种移动策略,都会产生一个不同于当前的状态.
(0代表空格)
比如对于状态          左移             上移 
1  2  3                                           1  2  3                                            1  0  3
4  0  5                        0  4  5                          4  2  5 
6  7  8                                           6  7  8                                            6  7  8   

      所以简单的说,每个状态的可能子状态有(平均起来)3个,依据深度优先的策略,深度搜索可以简单的表示成一个递归的过程。
depthSearch(node T)
{
    visit(T); 
    for each sonNode son of T, do depthSearch(node son);
}
      涉及到具体的实现,那么我们就要对其中的求子节点细化并用语言描述。比如在8数码的背景下,怎么求子节点呢?前面提到,上下左右的移动会产生子节点,那么自然的可以想到,有某中方式来表示空格移动方向,因为要对所有的子接点逐个的进行深度搜索。
一个简单的方法,用一个整数来替代方向,比如0代表左,1代表下,2代表右,3代表上。所以求子接点的函数描述如下:
Node sonNode( Node t, int i)
{
//在这里添加代码。
}
所以8数码的深度状态搜索算法描述如下:
boolean depthSearch(node T)
{
   if(is(T))return TRUE;
   else  if( visit(T)) //访问并检查是否还有子节点没有被访问。
   { 
      for(int i=0;i<4;i++)
      {
         if(able(sonNode(T,i)))
            depthSearch(sonNode(T,i));
      }
   }
   else return  FLASE;
}
其中boolean able(Node n)是用于确定节点n是否曾经被访问过。
那么说了这么多,我们需要保存已经访问过的节点吗??因为节点的数量相当大,所以如果存,将会耗费大量的空间。这里有一个特殊的方法,可以用hash表的方法来确定节点是否被访问。但是如果需要记录路径的话,最好还是将节点存起来,因为需要记录父节点。具体程序见我的文集.