Go语言中文网 为您找到相关结果 21

drools -Rete算法

Rete算法是Charles Forgy在1979年的论文中首次提出的,针对基于规则知识表现的模式匹配算法。目前来说,大部分规则引擎还是基于rete算法作为核心,但都有所改进,比如drool,jess等等,下面介绍rete算法的概念 1.rete 算法 Rete算法是一种高效的模式匹配算法用来实现产生式规则系统 (空间换时间,用内存换取匹配速度) 它是高效的算法,它通过缓存避免了相同条件多次评估的情况,但是带来了大量的内存使用 Rete 在拉丁语中是 ”net” ,有网络的意思;Rete算法通过规则条件生成了一个网络,每个规则条件是网络中的一个节点 rete可以被分为两部分:规则编译和运行时执行。规则编译是指根据规则集生成推理网络的过程,运行时执行指将数据送入推理网络进行筛选的过程。 2.规...阅读全文

博文 2017-11-29 01:45:52 u012373815

分布式任务系统cronsun

cronsun 是一个分布式任务系统,单个结点和 `*nix` 机器上的 `crontab` 近似。支持界面管理机器上的任务,支持任务失败邮件提醒,安装简单,使用方便,是替换 `crontab` 一个不错的选择。 cronsun 是为了解决多台 `*nix` 机器上`crontab` 任务管理不方便的问题,同时提供任务高可用的支持(当某个节点死机的时候可以自动调度到正常的节点执行)。 cronsun 是在管理后台添加任务的,所以一旦管理后台泄露出去了,则存在一定的危险性,所以`cronsun`支持`security.json`的安全设置: 如上设置开启安全限制,则添加和执行任务的时候只允许选择配置里面指定的用户来执行脚本,并且脚本的扩展名要在配置的脚本扩展名限制列表里面...阅读全文

开源项目 2017-07-04 03:00:06 网友

堆排序算法及go语言实现

堆分最大堆、最小堆。 以最大堆为例。 最大堆是一个完全二叉树。 并且要求每个结点的值必须大于他的两个子节点。 所以他的根结点一定是最大值。 但是左右结点大小不一定。 用数组表示的二叉树,可以这样表达: i的子节点下标为 2*i + 1 和 2 * i + 2. i的父节点下标为 (i-1)/2。 对于数组长度length,大于length/2的下标一定没有子节点. 排序思想是构建最大堆,之后根节点就是最大的一个了,把根结点拿出来,再把剩下的堆整理成最大堆,再把根拿出来。循环直到最后一个元素。 func HeapSort(values []int) { buildHeap(values) for i := len(values); i > 1; i-- { values[0], values[...阅读全文

博文 2016-04-15 16:00:02 zhaoguoguang

golang 实现单链表

package main //链表实现 import ( "fmt" "os" ) //定义错误常量 const ( ERROR = -1000000001 ) //定义元素类型 type Element int64 //定义节点 type LinkNode struct { Data Element //数据域 Nest *LinkNode //指针域,指向下一个节点 } //函数接口 type LinkNoder interface { Add(head *LinkNode, new *LinkNode) //后面添加 Delete(head *LinkNode, index int) //删除指定index位置元素 Insert(head *LinkNode, index int, d...阅读全文

博文 2017-02-10 10:29:25 赵雍

算法最短路径-Dijkstra(Golang)

//假设有9个节点,图在代码下方,可以参考 shortTablePath存放着V0到Vx某节点的最短路径 该算法,第一次先将V0的节点连接的权值存入shortTablePath,没连接的,用MAXWEIGHT表示.package main import ( "fmt" ) const MAXVEX int = 9 const MAXWEIGHT int = 1000 var shortTablePath = [MAXVEX]int{MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT, MAXWEIGHT} func main() { graph := NewGraph()...阅读全文

博文 2017-09-29 04:30:01 zhongxuan

golang 手撸 平衡二叉树

golang 手撸 平衡二叉树 树是一种计算机数据结构中非常常用的一种结构,其中就包含了:平衡二叉树,这种树是一种特殊的二叉查找树(二叉查找树也就是,右孩子大于其父结点,左孩子小于其父结点的树),但是简单的二叉查找树存在的问题就是不平衡,最差的查找效率为O(n),故就有人发明了一种平衡的额二叉查找树。 特点 平衡二叉树是一种二叉查找树 每个结点的左子树的高度减去右子树的高度的绝对值不超过1 空树和左右子树都是平衡二叉树 相比红黑树,平衡二叉树比较适用于没有删除的情况 平衡因子 平衡二叉树是在二叉查查找树的基础上进行构建了,为了维持平衡二叉树的平衡,那么就需要一种机制来判断平衡二叉树是否是平衡的。这种机制就叫做平衡因子。 平衡二叉树的每个结点都会维持一个值,这个值就是平衡因子,这个平衡因子就是...阅读全文

博文 2019-07-14 17:32:43 _AlphaBaby_

解决连通性问题的四种算法

最近做 B 站弹幕分析 的项目,学习 Jieba 中文分词的动态规划算法,发现自己的算法知识待系统的学习,遂读 Sedgewick 的《算法 C 实现第三版》,这一系列算法的代码放在 Github,文章会同步到 SF,随意转载。 连通性问题 问题概述 先来看一张图: 在这个彼此连接和断开的点网络中,我们可以找到一条 p 点到 q 点的路径。在计算机网络中判断两台主机是否连通、在社交网络中判断两个用户是否存在间接社交关系等,都可以抽象成连通性问题。 问题抽象 可将网络中的点(主机、人)抽象为对象,p-q 表示 p连接到q,连通关系可传递: p-q & q-r => p-r;为简述问题,将两个对象标记为一个整数对,则给定整数对序列就能描述出点网络。 如下图结点数 N = 5 的网络(使用 0 ~...阅读全文

博文 2018-01-28 15:34:36 wuYin

golang反射初试

golang反射来自Go AST(Abstract Syntax Tree). reflect操作更多像traverse AST. t := reflect.TypeOf(obj) 使用TypeOf()获取类型信息. v := reflect.ValueOf(obj) 使用ValueOf获取值信息 如果t是Array, Slice, Map, Chan或Pointer,可以继续继续使用Elem()方法获取其元素的更多信息. Elem(): 必须是Array, Slice, Map, Chan或 Pointer类型. Field(int)或FieldByName(string)或FieldXXX()相关操作: 必须是Struct类型 Int(), String()...等叶结点操作: 必须是相...阅读全文

用golang实现的单向链表

复习一下数据结构,用golang来实现单向链表 package main import "fmt" type Object interface{} type Node struct { Data Object next *Node } type List struct { size uint64 head *Node tail *Node } func (list *List) Init() { (*list).size = 0 (*list).head = nil (*list).tail = nil } // 向链表追加节点 func (list *List) Append(node *Node) bool { if node == nil { return false } (*node...阅读全文

博文 2019-07-12 00:33:43 ustb80

Go语言单链表

package main import "fmt" type Node struct { data int next *Node } func Shownode(p *Node){ //遍历 for p != nil{ fmt.Println(*p) p=p.next //移动指针 } } func main() { var head = new(Node) head.data = 0 var tail *Node tail = head //tail用于记录最末尾的结点的地址,刚开始tail的的指针指向头结点 for i :=1 ;i<10;i++{ var node = Node{data:i} (*tail).next = &node tail = &node } Shownode(h...阅读全文

博文 2019-12-25 21:33:13 huang_he_87

golang实现AVL树

AVL树是一棵高度平衡的二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树。 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1。 不废话直接上代码(golang实现): package main import ( "log" ) func main() { array := []int{5, 3, 1, 8, 9, 10, 11, 2, 4, 7, 6, 12} var root *AVLTreeNode for _, v := range array { root = root.InsertNode(v) log.Println("root=> key:", root.value, "high:", root.high) } log.Println("----------...阅读全文

博文 2018-12-06 19:34:55 随意两秒钟

[leetcode in golang]83、删除排序链表中的重复元素

/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func deleteDuplicates(head *ListNode) *ListNode{ if head==nil||head.Next==nil{ return nil } for head!=nil&&head.Next!=nil{ if head.Val==head.Next.Val{ head.Next=head.Next.Next }else{ head=head.Next } return head } return nil /** * Definition for sing...阅读全文

博文 2019-09-25 00:32:50 aside section ._1OhGeD

链表中倒数第k个结点

题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路 设置一对快慢指针 2.快指针先走k步,若快指针没走完k步便为null,直接返回null即可 3.快慢指针同时移动,若快指针指向null,直接返回慢指针即可 Java代码实现 public ListNode FindKthToTail(ListNode head,int k) { ListNode fast = head; ListNode slow = head; while(k>0 && fast != null){ fast = fast.next; k--; } if(k>0){ return null; } while(fast != null){ slow = slow.next; fast = fast.next; } ...阅读全文

博文 2020-01-07 19:32:49 youzhihua

golang 归并排序,快速排序, 堆排序

归并排序 在这里插入图片描述 func sortArray(nums []int) []int { if len(nums) <= 1 { return nums } partA := sortArray(nums[:len(nums)/2]) partB := sortArray(nums[len(nums)/2:]) temp := make([]int, len(partA) + len(partB)) aPointer := 0 bPointer := 0 i := 0 for aPointer < len(partA) && bPointer < len(partB) { if partA[aPointer] < partB[bPointer] { temp[i] = partA[...阅读全文

博文 2020-04-01 11:33:04 chenyi_li

437.路径总和III

题目描述 给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。 示例 root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11 / \ \ 3 -2 1 返回 3。和等于 8 的路径有: 1. 5 -> 3 2. 5 -> 2 -> 1 3. -3 -> 11 思路 既然题目中说明不超过1000个结点,可以使用一个长度为1000的数组,用于保存所有结点的值。 2.可以抽象理解为v...阅读全文

博文 2020-01-11 14:32:42 youzhihua

二叉搜索树的第k个结点

题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 思路 首先简单总结下二叉搜索树的性质。 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节点。 从二叉搜索树的性质可以看出,其中序遍历便是一个从小到大的排序。 设置一个count,每遍历一个数据便自增1,当count=k时,就找到了正确答案。 Java代码实现 public class Solution { TreeNode KthNode(TreeNode root, int k) { int count ...阅读全文

博文 2020-03-23 19:32:47 youzhihua

数据结构与算法系列之链表操作全集(一)(GO)

前言这里不介绍链表是什么之类的概念,大家可以找一找相关的书籍或文章看看,本文主要是用GO来实现一些链表的操作说明:刚开始学习GO,可能用到的实现方法不是最简便的,意思表达出来了就可以,大家凑合着看【手动狗头】。如有错误,欢迎指正以下的代码均可从这里获取https://github.com/Rain-Life/learnGo收获:做链表的题,一定!一定!一定!要画图!要画图!要画图!不然,特别容易乱,很难一遍写出0 error,0 warning的链表代码链表单链表的基本操作链表通过指针将一组零散的内存块串联在一起,这里的内存块称为链表的结点。为了将这些节点给串起来,每个链表的结点除了存储数据之外,还会记录下一个结点的指针(即下一个结点的地址),这个指针称为:后继指针定义单链表基本结构定义链表...阅读全文

博文 2020-10-22 10:32:40 书旅

Go语言单链表

package main import "fmt" type Node struct { data int next *Node } func Shownode(p *Node){ //遍历 for p != nil{ fmt.Println(*p) p=p.next //移动指针 } } func main() { var head = new(Node) head.data = 0 var tail *Node tail = head //tail用于记录最末尾的结点的地址,刚开始tail的的指针指向头结点 for i :=1 ;i<10;i++{ var node = Node{data:i} (*tail).next = &node tail = &node } Shownode(h...阅读全文

博文 2019-12-25 19:33:14 huang_he_87

链表中环的入口结点

题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路 可以使用快慢指针的思想,来判断链表中是否有环,快指针每次走两步,慢指针每次走一步,若快指针走到了空节点便是无环,若快慢指针相遇,便有环。 假设环形链表的起点到环形入口的距离为a,环形链表的入口到快慢指针的相遇点的距离为b,相遇点到环形链表的入口的距离为c,具体详情看下图。 我们可以通过公式推导出,当两个指针相遇之后,一个指针移到头部,一个指针在相遇点继续走,每次走一个单位;二者最终可以在链表入口相遇;具体公式如下: -1. 2 (a+b) = a + k(b+c) + c -2. ** a = (k-1)(b+c) + c** -3. 其中k大于等于1,而b+c为一圈,所以这两个指针肯定会在入口相遇 ...阅读全文

博文 2020-03-14 21:32:45 youzhihua

两数之和 IV - 输入 BST(golang)

题:两数之和 IV - 输入 BST 方法一: 中序遍历,有序存放到一个数组中,通过两数之和 II - 输入有序数组(golang)即可解。 func findTarget(root *TreeNode, k int) bool { arr := DFS(root) for l, r := 0, len(arr)-1; l < r; { sum := arr[l] + arr[r] if sum < k { l ++ } else if sum > k { r -- } else { return true } } return false } func DFS(node *TreeNode) []int { // 左根右 if node == nil { return []int{} } ...阅读全文

博文 2020-07-04 15:32:51 薇清潜