21st 五月 2007
最近InfoQ的站点上刊登了一系列关于.NET与Java互操作的文章,InfoQ中文站点计划五月底之前也将把这一系列文章翻译上线,于是仔细读了其中几篇文章,顺便对两种运行时环境下互操作的实现有了一点了解。
关于互操作这个话题,貌似不明真相的Ricepig同学曾放言说:JVM与CLR两个运行时环境下的互操作实现,除了服务层面上的集成,其余都是空谈。对此观点表示一定的保留意见,且不说早已存在的Java本地接口项目JNI和GlueGen的存在,单是最近发布的JNBridge 3.1就提供了Java 和.NET代码运行在JVM或CLR之上的跨平台机制,甚至可以实现不同语言程序运行时的内存共享。并且在分布式集群环境下,借助于JNBridge的跨语言平台的代码调用同样也可以实现。
还不太清楚互操作是否只是局限在不同语言类库间的相互调用,是否Java嵌入C语言代码也像C嵌入Python代码或C中嵌入汇编一样可以实现。如果真的是这样,运行在Java虚拟机和.NET通用语言运行时CLR之上的代码互操作将是很令人期待的技术。当然,互操作的实现最终还是需要借助于技术主导厂商之间的合作,比如微软与SUN提供技术上融合的解决方案。除此之外,性能问题也是互操作的需要考虑的因素之一,毕竟代码在非原生运行时环境下的执行效率还不清楚,但可以肯定的是,互操作应该会对单一平台的代码执行效率产生一定影响。
关于互操作这个主题,TSS的站点上也给出了一系列文章,包含消息传递、网络服务、分布式对象、商业流程整合等众多的内容,如果感兴趣可以进一步深入学习。
Posted in 编程语言, 诸子百家 | 2 Comments »
14th 五月 2007
SQL Multimedia是结构化查询语言SQL针对多媒体应用的规范,SQL/MM国际标准主要包含全文检索(Full-Text)、空间拓展(Spatial)、静态图像(Still Image)和数据挖掘(Data Mining)等针对不同领域的内容。标准在这四个领域定义新的结构化查询类,使得这Multimedia方面的SQL查询效率大幅提高,并使基于SQL/MM的查询更加规范、兼容性好且易于管理。
SQL/MM中针对于地理信息的查询拓展是Spatial部分,Spatial拓展方便了存储、管理、检索各类空间数据类型的操作。在几何操作、方位坐标、拓扑关系方面都通过了强有力的支持。参与查询的空间参数,需要定义在相同的空间参考系中,但未来的空间标准版本将会放松这个限制。
目前SQL/MM提供的空间数据类型支持包括点、线、面等二维空间数据,以及部分三维拓展功能和不同空间参考坐标系的支持。在SQL/MM定义的Spatial类层次中,ST-Geometry是通用的父类,其各种子类可以被实例化来进行查询操作。如ST-Point、ST-Curve、ST-MultiPolygon等应用于不同操作的子类。在具体表结构定义中,表示空间地物位置的LOCATION字段即可以被定义为ST_GEOMETRY类型。在空间数据操作方面,通用的操作包括点和直线关系、线与线关系、线与面关系的确定,如从几条线确定一个多边形,或检测直线是否与曲线相切等操作。随着SQL标准的不断发展,将会为更多领域提供结构化查询的支持。譬如在SQL 2007新的ISO标准之中,已经添加进来XQuery、SQL/XML和Semantic Web语义网方面的内容。
SQL/MM提供的空间拓展、数据挖掘、智能化全文数据库等内容的研究和应用,已逐步受到业界更多的关注,如果想了解更多相关的信息,可以在Whitemarsh信息系统公司提供的资料链接中查看更多,包括SQL99、SQL2003、XSQL、SQL/MM等各方面的内容都可以在这里找到。
Posted in 思维记录, 聚焦GIS | 2 Comments »
7th 五月 2007
06年《程序员》有一期专题策划叫做”算法的力量”,被认为是年度最佳的一个专题,最近又温习一遍,重读李开复、凌小宁等人的文章,有不少新的收获。王咏刚那篇《算法悖论》提到斯坦福博士生Amit关于路径搜索的总结,简单读后感觉该学的东西还有很多。
一般说来,最短路算法划分为静态最短路和动态最短路算法。静态路径最短路是外界条件不变,计算起点到终点的最短路径,主要有Dijkstra算法和A*算法。而动态路径最短路是外界环境不断发生变化,无法计算预测路径的情况下求最短路,典型的有D*算法,在机器人探路中常应用D*算法,美国火星探测器的关键寻路算法就是采用的D*实现。其中自己更感兴趣以A*为代表的启发式路径搜索算法。
Dijkstra是数据结构中必定会涉及的典型最短路算法,Dijkstra算法按路径长度递增顺序产生一个节点到其他所有节点最短路径,以起始点为中心向外层层扩展,直到终点为止。Dijkstra算法可以得到最短路径的最优解,但由遍历计算的节点过多而效率较低。
启发式(Heuristic)A*(A-Star)算法应该是静态路网中求解最短路时最有效的方法。启发式搜索与深度优先(DFS)和广度优先(BFS)这类盲目型搜索最大的不同,在于当前搜索结点选择下一步路径时,通过启发函数计算选择代价最少的结点,设计优秀的启发函数往往求得最优解的同时具备较低的时间复杂度。而DFS和BFS算法在运气不好时可能需要遍历完整个解空间。
A*算法公式表示为:F(n)=G(n)+H(n),其中F(n) 是节点n从初始点到目标点的估价函数,G(n) 是状态空间中从初始节点到n节点的实际代价,H(n)则是节点n到目标节点最佳路径的估计代价。当前结点到目标结点的估值函数H(n)是启发式搜索设计的核心。保证找到最短路径的充要条件是,估价函数H(n)计算的两点间距离小于等于实际距离。对于几何路网来说,可以取两节点间欧几理德直线距离做为估价值,即F(n)=G(n)+Sqrt((dx-nx)*(dx-nx)+(dy-ny) *(dy-ny)),这样估价函数F在G值一定的情况下,受估价值H制约保证路径搜索向终点的方向进行,而不是像Dijstra算法无方向的向四周延伸搜索。
最短路算法不仅在GIS的交通路线导航、路径分析领域应用广泛,在解决路径搜索相关的应用中也十分普遍,包括网络路由算法、机器人探路、人工智能、游戏设计等等。已有同学基于云风的路径搜索算法给出改进后的源代码,希望可以在理解A*算法原理方面提供一定帮助。
Posted in 聚焦GIS, 诸子百家 | 评论关闭