文心一言 VS 讯飞星火 VS chatgpt (357)-- 算法导论24.2 3题

三、上面描述的 PERT 图的公式有一点不太自然。在一个更自然的结构下,图中的结点代表要执行的工作,边代表工作之间的次序限制,即边 (u,v) 表示工作 u 必须在工作 v 之前执行。在这种结构的图中,我们将权重赋给结点,而不是边。请修改 DAG-SHORTEST-PATHS 过程,使得其可以在线性时间内找出这种有向无环图中一条最长的路径。如果要写代码,请用go语言。

文心一言:

在处理有向无环图(DAG)并希望找到最长路径时,如果权重被赋给节点而不是边,并且我们关注的是从源节点到任意其他节点的最长路径,我们可以使用动态规划的方法来解决这个问题。然而,如果目标是找到图中任意两点之间的最长路径,问题将变得复杂且不一定存在多项式时间解决方案(特别是如果图中存在环,尽管这里我们处理的是DAG)。

对于DAG中的最长路径问题(权重在节点上),一个常见的方法是使用拓扑排序和动态规划。我们将基于这个思路来实现Go代码。

步骤 1: 拓扑排序

首先,我们需要对图进行拓扑排序,以确保在处理每个节点时,其所有前驱节点都已经被处理。

步骤 2: 动态规划计算最长路径

在拓扑排序的基础上,我们可以从源节点开始,逐步计算到达每个节点的最长路径。

以下是用Go语言实现的示例代码:

package mainimport ("container/heap""fmt"
)type Node inttype Graph map[Node][]Nodetype IntHeap []intfunc (h IntHeap) Len() int           { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] > h[j] } // 最大堆
func (h IntHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }func (h *IntHeap) Push(x interface{}) {*h = append(*h, x.(int))
}func (h *IntHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}func topologicalSort(g Graph) ([]Node, error) {inDegree := make(map[Node]int)for u := range g {inDegree[u] = 0}for u, neighbors := range g {for _, v := range neighbors {inDegree[v]++}}queue := &IntHeap{}heap.Init(queue)for u, degree := range inDegree {if degree == 0 {heap.Push(queue, int(u))}}var sorted []Nodefor queue.Len() > 0 {u := Node(heap.Pop(queue).(int))sorted = append(sorted, u)for _, v := range g[u] {inDegree[v]--if inDegree[v] == 0 {heap.Push(queue, int(v))}}}if len(sorted) != len(g) {return nil, fmt.Errorf("graph has cycles")}return sorted, nil
}func longestPath(g Graph, nodeWeights map[Node]int) (map[Node]int, error) {sorted, err := topologicalSort(g)if err != nil {return nil, err}dp := make(map[Node]int)for _, node := range sorted {dp[node] = nodeWeights[node]for _, neighbor := range g[node] {if val, ok := dp[neighbor]; ok {dp[node] = max(dp[node], val+nodeWeights[node])}}}return dp, nil
}func max(a, b int) int {if a > b {return a}return b
}func main() {g := Graph{0: []Node{1, 2},1: []Node{3},2: []Node{3},3: nil,}nodeWeights := map[Node]int{0: 2,1: 3,2: 5,3: 0,}longest, err := longestPath(g, nodeWeights)if err != nil {fmt.Println("Error:", err)return}fmt.Println("Longest Path Values:", longest)
}

注意:

  • longestPath函数中,dp[node]存储的是从源节点(这里假设为所有节点可达的起始点)到node的最长路径长度。
  • 我们需要确保图是无环的,这通过拓扑排序来检查。
  • max函数用于比较两个整数并返回较大的那个。
  • 这个实现假设图中至少有一个节点,并且所有节点都是可达的(从源节点出发)。在实际应用中,可能需要添加额外的逻辑来处理特殊情况。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

讯飞星火:

为了在有向无环图(DAG)中找到最长路径,我们可以使用拓扑排序算法。首先,我们需要对图进行拓扑排序,然后按照拓扑排序的顺序遍历结点,同时更新每个结点的最长路径。以下是使用 Go 语言实现的代码:

package mainimport ("fmt"
)type Edge struct {To   intCost int
}func longestPath(n int, edges [][]Edge) []int {// 初始化邻接表adjList := make([][]Edge, n)for _, edge := range edges {u, v, cost := edge[0].To, edge[1].To, edge[1].CostadjList[u] = append(adjList[u], Edge{v, cost})}// 拓扑排序var topoSort func(int, []bool, []int)topoSort = func(node int, visited []bool, stack []int) {visited[node] = truefor _, edge := range adjList[node] {if !visited[edge.To] {topoSort(edge.To, visited, stack)}}stack = append(stack, node)}visited := make([]bool, n)stack := make([]int, 0)for i := 0; i < n; i++ {if !visited[i] {topoSort(i, visited, stack)}}// 初始化最长路径数组longestPaths := make([]int, n)for i := 0; i < n; i++ {longestPaths[i] = -1 // 假设没有路径时为-1}// 按照拓扑排序的顺序更新最长路径for len(stack) > 0 {node := stack[len(stack)-1]stack = stack[:len(stack)-1]for _, edge := range adjList[node] {if longestPaths[edge.To] < longestPaths[node]+edge.Cost {longestPaths[edge.To] = longestPaths[node] + edge.Cost}}}return longestPaths
}func main() {n := 6edges := [][]Edge{{{1}, {2, 5}},{{3}, {2, 3}},{{4}, {3, 6}},{{5}, {3, 8}},{{6}, {4, 7}},}result := longestPath(n, edges)fmt.Println("最长路径长度:", result)
}

这段代码首先定义了一个边的结构体,包含目标节点和权重。然后,我们实现了一个名为 longestPath 的函数,该函数接受节点数 n 和边的列表作为输入,并返回一个整数数组,表示从每个节点到其他节点的最长路径长度。在这个函数中,我们首先构建了邻接表,然后使用拓扑排序算法对图进行排序。最后,我们按照拓扑排序的顺序更新每个节点的最长路径。

360智脑:

在有向无环图(DAG)中寻找最长路径的问题可以通过修改标准的DAG最短路径算法来解决。基本的思路是反转所有边的方向,然后运行标准的最短路径算法。但是,由于我们希望直接在原始图上操作,我们可以通过简单地改变距离数组的初始化和更新规则来实现这一点。

以下是一个使用Go语言实现的算法,用于在给定的有向无环图中找到一条最长路径:

package mainimport "fmt"type Edge struct {to   intcost int
}type Graph struct {nodes []intedges [][]Edge
}func NewGraph(nodes int) *Graph {return &Graph{nodes: make([]int, nodes),edges: make([][]Edge, nodes),}
}func (g *Graph) AddEdge(from, to, cost int) {g.edges[from] = append(g.edges[from], Edge{to, cost})
}func LongestPathInDag(graph *Graph, start int) ([]int, int) {// Initialize distances to negative infinitydist := make([]int, graph.nodes)for i := range dist {dist[i] = -1 << 60 // Use a large negative number as initial value}dist[start] = 0 // Distance to the start node is 0// Topological sortsortedNodes := topologicalSort(graph)// Relaxationfor _, node := range sortedNodes {for _, edge := range graph.edges[node] {if dist[edge.to] < dist[node]+edge.cost {dist[edge.to] = dist[node] + edge.cost}}}return dist, len(sortedNodes)
}func topologicalSort(graph *Graph) []int {visited := make([]bool, graph.nodes)stack := make([]int, 0)var visit func(int)visit = func(node int) {visited[node] = truefor _, edge := range graph.edges[node] {if !visited[edge.to] {visit(edge.to)}}stack = append(stack, node)}for i := 0; i < graph.nodes; i++ {if !visited[i] {visit(i)}}// Reverse the stack to get the topological orderfor i, j := 0, len(stack)-1; i < j; i, j = i+1, j-1 {stack[i], stack[j] = stack[j], stack[i]}return stack
}func main() {graph := NewGraph(6)graph.AddEdge(0, 1, 5)graph.AddEdge(0, 2, 3)graph.AddEdge(1, 3, 6)graph.AddEdge(1, 2, 2)graph.AddEdge(2, 4, 4)graph.AddEdge(2, 5, 2)graph.AddEdge(2, 3, 7)graph.AddEdge(3, 4, -1)graph.AddEdge(4, 5, -2)dist, _ := LongestPathInDag(graph, 1)fmt.Println("Longest path distances:", dist)
}

在这个代码中,我们首先定义了一个Graph结构体来存储图的信息,包括节点和边。LongestPathInDag函数实现了最长路径算法,它首先对图进行拓扑排序,然后按照拓扑顺序进行边的松弛操作。注意,我们初始化距离数组为负无穷大(除了起始节点),并且在松弛操作中更新距离时使用的是加法而不是减法,因为我们要找的是最长路径。

请注意,这个算法假设图中没有负权环,因为在存在负权环的情况下,最长路径问题是没有有限解的。此外,这个算法返回的是从起始节点到每个节点的最长路径长度,而不是具体的路径本身。如果需要找到具体的路径,还需要额外的数据结构来记录前驱节点。

智谱清言:

在这种结构下,我们想要找到的是最长路径,而不是最短路径。为了实现这一点,我们需要对 DAG-SHORTEST-PATHS 算法进行一些修改。以下是修改后的算法,适用于找到有向无环图(DAG)中的最长路径,我们将这个过程称为 DAG-LONGEST-PATHS
首先,我们需要对每个节点赋予权重,这些权重将代表执行每个工作的时间或成本。在算法中,我们将使用顶点权重而不是边权重,并且初始化所有顶点的 dist 值为负无穷大(因为我们要找最长路径),除了起始顶点(通常是源点,可以假设为0)。
下面是使用 Go 语言实现的 DAG-LONGEST-PATHS 过程:

package main
import ("fmt""math"
)
// Vertex represents a node in the graph
type Vertex struct {ID         intWeight     int   // Time or cost of the task represented by the vertexAdjacent   []*VertexDist       int // Distance (longest path length) from source to this vertexPrev       *VertexExploration int // Used to determine the order of exploration
}
// AddEdge adds a directed edge from vertex u to vertex v
func AddEdge(u, v *Vertex) {u.Adjacent = append(u.Adjacent, v)
}
// DAGLongestPaths finds the longest paths in a Directed Acyclic Graph (DAG)
func DAGLongestPaths(vertices []*Vertex) {for _, v := range vertices {v.Dist = -math.MaxInt64 // Initialize distances to negative infinity}// Topologically sort the verticestopologicalSort(vertices)// Relax edges in topological orderfor i := len(vertices) - 1; i >= 0; i-- {for _, u := range vertices[i].Adjacent {if u.Dist < vertices[i].Dist+vertices[i].Weight {u.Dist = vertices[i].Dist + vertices[i].Weightu.Prev = vertices[i]}}}
}
// TopologicalSort performs a topological sort on the vertices
func topologicalSort(vertices []*Vertex) {// Initialize all vertices as unvisitedvisited := make(map[*Vertex]bool)var visit func(v *Vertex)visit = func(v *Vertex) {if visited[v] {return}visited[v] = truefor _, u := range v.Adjacent {visit(u)}vertices = append(vertices, v) // Add vertex to the end (reverse order)}for _, v := range vertices {visit(v)}// Reverse the order of vertices to get the correct topological orderfor i, j := 0, len(vertices)-1; i < j; i, j = i+1, j-1 {vertices[i], vertices[j] = vertices[j], vertices[i]}
}
func main() {// Example usage:// Create verticesv := make([]*Vertex, 5)for i := range v {v[i] = &Vertex{i, 0, []*Vertex{}, 0, nil, 0}}// Assign weights to verticesv[0].Weight = 2v[1].Weight = 3v[2].Weight = 4v[3].Weight = 2v[4].Weight = 3// Create edges (u -> v means u must be done before v)AddEdge(v[0], v[1])AddEdge(v[0], v[2])AddEdge(v[1], v[3])AddEdge(v[2], v[3])AddEdge(v[2], v[4])// Find longest pathsDAGLongestPaths(v)// Output the longest pathsfor _, vertex := range v {fmt.Printf("Vertex %d, Longest Path Length: %d\n", vertex.ID, vertex.Dist)}
}

在这段代码中,我们首先定义了顶点结构,并为每个顶点添加了权重、距离、前驱顶点和邻接顶点的列表。然后,我们实现了 DAGLongestPaths 函数,该函数首先对顶点进行拓扑排序,然后按照拓扑顺序放松边。最后,我们在 main 函数中创建了一个示例图,并调用了 DAGLongestPaths 函数来找到最长路径。
注意,这个实现假设了图中至少有一个源点,即没有任何顶点指向它的顶点。在实际情况中,可能需要根据具体问题调整代码以处理多个源点的情况。此外,此代码没有处理图中的环,因为题目明确指出这是一个 DAG。如果在非 DAG 上使用

天工:

要修改DAG-SHORTEST-PATHS过程以找出最长路径,我们可以将原算法稍作调整,转而关注最大值而非最小值。在有向无环图(DAG)中寻找最长路径,我们依然可以采用拓扑排序,但这次我们关注的是结点的权重,且需要将路径长度的计算从求和变为求最大值。

以下是使用Go语言实现的算法:

package mainimport ("fmt"
)// GraphNode represents a node in the DAG
type GraphNode struct {id     intweight int // Node weight
}// Edge represents a directed edge in the DAG
type Edge struct {from, to int
}// Graph represents a directed acyclic graph
type Graph struct {nodes  []*GraphNodeedges  []Edgeindeg  map[int]int // In-degree of each nodemaxLen map[int]int // Max length to reach each node
}// NewGraph creates a new Graph
func NewGraph() *Graph {return &Graph{nodes:  make([]*GraphNode, 0),edges:  make([]Edge, 0),indeg:  make(map[int]int),maxLen: make(map[int]int),}
}// AddNode adds a new node to the graph
func (g *Graph) AddNode(id, weight int) {g.nodes = append(g.nodes, &GraphNode{id, weight})g.indeg[id] = 0g.maxLen[id] = weight
}// AddEdge adds a new edge to the graph
func (g *Graph) AddEdge(from, to int) {g.edges = append(g.edges, Edge{from, to})g.indeg[to]++
}// TopologicalSort returns a topological order of the nodes
func (g *Graph) TopologicalSort() []int {var order []intqueue := []int{}// Add all nodes with in-degree 0 to the queuefor id, degree := range g.indeg {if degree == 0 {queue = append(queue, id)}}// Process the queuefor len(queue) > 0 {current := queue[0]order = append(order, current)queue = queue[1:]// Update the in-degree of the neighbors and add them to the queue if their in-degree becomes 0for _, e := range g.edges {if e.from == current {g.indeg[e.to]--if g.indeg[e.to] == 0 {// Update maxLen for the nodeif currentMax, ok := g.maxLen[current]; ok {if g.maxLen[e.to] < g.maxLen[current]+currentMax {g.maxLen[e.to] = g.maxLen[current] + currentMax}}queue = append(queue, e.to)}}}}return order
}// FindLongestPath returns the longest path in the graph
func (g *Graph) FindLongestPath() int {g.TopologicalSort()maxPath := 0for _, len := range g.maxLen {if len > maxPath {maxPath = len}}return maxPath
}// main function to test the graph
func main() {g := NewGraph()g.AddNode(1, 5)g.AddNode(2, 3)g.AddNode(3, 2)g.AddNode(4, 4)g.AddNode(5, 0)g.AddEdge(1, 2)g.AddEdge(1, 3)g.AddEdge(1, 4)g.AddEdge(2, 5)g.AddEdge(3, 5)g.AddEdge(4, 5)fmt.Println("Longest Path:", g.FindLongestPath()) // Should print the longest path
}

这个代码首先定义了图、结点和边的数据结构,然后实现了拓扑排序和寻找最长路径的算法。在FindLongestPath函数中,我们利用拓扑排序的结果,遍历每个结点来更新到达该结点的最长路径长度。最后,我们遍历所有的maxLen来找到最长的路径。


## chatgpt:要在有向无环图中找出一条最长的路径,可以修改 DAG-SHORTEST-PATHS 过程为 DAG-LONGEST-PATHS 过程以实现此目的。下面是一个用 Go 语言实现的 DAG-LONGEST-PATHS 过程的示例代码:```go
package mainimport ("fmt"
)type Graph struct {vertices intadj      map[int]map[int]bool
}func NewGraph(vertices int) Graph {return Graph{vertices: vertices,adj:      make(map[int]map[int]bool),}
}func (g *Graph) AddEdge(u, v int) {if g.adj[u] == nil {g.adj[u] = make(map[int]bool)}g.adj[u][v] = true
}func DAGLongestPaths(g Graph) []int {dist := make([]int, g.vertices)for i := range dist {dist[i] = -1}dist[0] = 0var topologicalOrder []intvar visit func(int)visit = func(u int) {for v := range g.adj[u] {if dist[v] < dist[u]+1 {dist[v] = dist[u] + 1}visit(v)}topologicalOrder = append(topologicalOrder, u)}visit(0)for i := len(topologicalOrder) - 1; i >= 0; i-- {u := topologicalOrder[i]for v := range g.adj[u] {if dist[v] < dist[u]+1 {dist[v] = dist[u] + 1}}}return dist
}func main() {g := NewGraph(6)g.AddEdge(0, 1)g.AddEdge(0, 2)g.AddEdge(1, 3)g.AddEdge(2, 3)g.AddEdge(3, 4)g.AddEdge(4, 5)longestPaths := DAGLongestPaths(g)fmt.Println("Longest paths from source vertex:")for i, path := range longestPaths {fmt.Printf("Vertex %d: %d\n", i, path)}
}

这段代码实现了 DAG-LONGEST-PATHS 过程,使用拓扑排序和动态规划的方法找出有向无环图中的最长路径。你可以根据自己的实际情况修改顶点数量和边的关系来对这段代码进行测试和调整。

kimi:

在有向无环图(DAG)中寻找最长路径的问题可以通过动态规划来解决。在这种情况下,我们通常使用拓扑排序,然后反向遍历图来计算每个节点的最长路径。这里是一个使用Go语言实现的算法:

  1. 拓扑排序:首先对图进行拓扑排序,确保每个节点在其依赖的节点之后被处理。
  2. 计算最长路径:使用拓扑排序的结果,从后向前遍历节点,更新每个节点的最长路径。

下面是具体的Go语言实现:

package mainimport ("fmt"
)// 图的节点
type Node struct {Value int
}// 图的边
type Edge struct {From, To *NodeWeight   int
}// 图结构
type Graph struct {Nodes []*NodeEdges []*Edge
}// 拓扑排序
func (g *Graph) TopologicalSort() []*Node {var sorted []*Nodevisited := make(map[*Node]bool)var visit func(*Node)visit = func(n *Node) {if visited[n] {return}visited[n] = truefor _, edge := range g.Edges {if edge.From == n {visit(edge.To)}}sorted = append(sorted, n)}for _, node := range g.Nodes {if !visited[node] {visit(node)}}// 反转排序结果,因为我们需要从依赖的节点开始计算for _, node := range sorted[:len(sorted)/2] {sorted[len(sorted)-1-len(sorted)/2+1], sorted[len(sorted)/2] = sorted[len(sorted)/2], node}return sorted
}// 计算最长路径
func (g *Graph) LongestPath() int {sorted := g.TopologicalSort()longestPaths := make([]int, len(sorted))for _, node := range sorted {longestPaths[nodesIndex[node]] = node.Value // 初始化为节点自身的值for _, edge := range g.Edges {if edge.From == node {longestPaths[nodesIndex[edge.To]] = max(longestPaths[nodesIndex[edge.To]], longestPaths[nodesIndex[node]]+edge.Weight)}}}return maxLongestPath(longestPaths)
}func maxLongestPath(paths []int) int {max := paths[0]for _, path := range paths {if path > max {max = path}}return max
}func max(a, b int) int {if a > b {return a}return b
}func nodesIndex[node *Node]intfunc main() {// 示例图nodes := []*Node{{1}, {2}, {3}, {4}}edges := []*Edge{{From: nodes[0], To: nodes[1], Weight: 1},{From: nodes[0], To: nodes[2], Weight: 2},{From: nodes[1], To: nodes[3], Weight: 1},{From: nodes[2], To: nodes[3], Weight: 1},}g := &Graph{Nodes: nodes, Edges: edges}longestPath := g.LongestPath()fmt.Println("The longest path in the DAG is:", longestPath)
}

这段代码定义了一个简单的有向无环图,并实现了拓扑排序和最长路径的计算。注意,这个实现假设图中的节点是连续编号的,并且每个节点的值可以作为路径的一部分。如果节点值不是路径的一部分,你需要调整代码来适应你的具体需求。

混元:

在Go语言中,我们可以修改DAG-SHORTEST-PATHS过程来找出有向无环图(DAG)中最长路径。以下是修改后的Go代码:

package mainimport ("fmt"
)// 定义边的结构
type Edge struct {to     intweight int
}// 定义图的结构
type Graph struct {vertices intedges    [][]Edge
}// 找出最长路径
func longestPath(g *Graph, start int) []int {dist := make([]int, g.vertices)for i := range dist {dist[i] = -1 // 初始化为-1表示无穷小}dist[start] = 0 // 起点的距离为0// 拓扑排序topoOrder := topologicalSort(g)// 根据拓扑排序计算最长路径for _, u := range topoOrder {for _, e := range g.edges[u] {v := e.toif dist[v] < dist[u]+e.weight {dist[v] = dist[u] + e.weight}}}return dist
}// 拓扑排序
func topologicalSort(g *Graph) []int {inDegree := make([]int, g.vertices)for _, edges := range g.edges {for _, e := range edges {inDegree[e.to]++}}queue := []int{}for i, degree := range inDegree {if degree == 0 {queue = append(queue, i)}}topoOrder := []int{}for len(queue) > 0 {u := queue[0]queue = queue[1:]topoOrder = append(topoOrder, u)for _, e := range g.edges[u] {v := e.toinDegree[v]--if inDegree[v] == 0 {queue = append(queue, v)}}}return topoOrder
}func main() {g := &Graph{vertices: 6,edges: [][]Edge{{{to: 1, weight: 5}, {to: 2, weight: 3}},{{to: 3, weight: 6}, {to: 2, weight: 2}},{{to: 4, weight: 4}, {to: 5, weight: 2}},{{to: 5, weight: 6}, {to: 4, weight: 7}},{{to: 3, weight: 1}},{},},}start := 0dist := longestPath(g, start)fmt.Println("Longest paths from vertex", start, "to all other vertices:")for i, d := range dist {fmt.Printf("Vertex %d: %d\n", i, d)}
}

代码解释

  1. Graph 结构:定义了图的结构,包括顶点数和边的集合。
  2. longestPath 函数:计算从起点到所有其他顶点的最长路径。
    • 初始化距离数组 dist,将起点的距离设为0,其他顶点的距离设为-1(表示无穷小)。
    • 使用拓扑排序来确定顶点的处理顺序。
    • 根据拓扑排序的结果更新每个顶点的最长路径。
  3. topologicalSort 函数:对图进行拓扑排序。
    • 计算每个顶点的入度。
    • 使用队列进行拓扑排序,将入度为0的顶点加入队列,并逐步处理这些顶点,更新其邻接顶点的入度。
  4. main 函数:创建一个示例图并调用 longestPath 函数计算最长路径。

这个代码可以在O(V+E)的时间复杂度内找到DAG中的最长路径,其中V是顶点数,E是边数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

httpsok-v1.17.0-SSL通配符证书自动续签

&#x1f525;httpsok-v1.17.0-SSL通配符证书自动续签 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具&#xff0c;基于全新的设计理念&#xff0c;专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业&#xff0c;稳定、安全、可靠。 一行命令&#xff0c;一分钟轻…

LQR算法核心思想

本章以倒立摆为解决目的 什么是线性二次型控制器&#xff08;LQR&#xff09; 开环系统 即状态变量的倒数 系统的状态空间矩阵A * 系统状态变量x A状态矩阵&#xff1a;描述系统本身物理特性的一个矩阵&#xff0c;它是由系统本身的机械结构、物理结构决定的&#xff0c;无法…

【漏洞复现】VEXUS多语言货币交易所存在未授权访问漏洞

漏洞描述 java后端,非常完整的一套交易所,UI前端做的也很漂亮,新增了交易跟单功能,前端pc+wap都是uniapp纯源码,前端源码node_modules环境已经安装好了,拿去直接编译就可以. 后端 前端 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共…

ARM 服务器上安装 OpenEuler (欧拉)

系统介绍 在 2019 年 7 月 19 日&#xff0c;华为宣布要在年底正式开源 openEuler 操作系统&#xff1b;在半年后的 12 月 31 日&#xff0c;华为正式开源了 openEuler 操作系统&#xff0c;邀请社区开发者共同来贡献。 一年后&#xff0c;截止到 2020 年12 月 25日&#xff…

第167天:应急响应-日志自动提取分析项目_ELK_Logkit_LogonTracer_Anolog等

目录 案例一&#xff1a; 日志自动提取-七牛Logkit&观星应急工具 Logkit 观星 案例二&#xff1a;日志自动分析-Web-360 星图&Goaccess&ALB&Anolog 360 星图 GoAccess ALB Anolog f8x 案例一&#xff1a; 日志自动提取-七牛Logkit&观星应急工具 …

Webpack 特性探讨:CDN、分包、Tree Shaking 与热更新

文章目录 前言包准备CDN 集成代码分包Tree Shaking原理实现条件&#xff1a;解决 treeShaking 无效方案&#xff1a;示例代码&#xff1a; 热更新&#xff08;HMR&#xff09; 前言 Webpack 作为现代前端开发中的核心构建工具&#xff0c;提供了丰富的特性来帮助开发者优化和打…

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节&#xff1a;Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节&#xff1a;隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…

cpu路、核、线程、主频、缓存

路&#xff1a;主板插口实际插入的 CPU 个数&#xff0c;也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如&#xff0c;一台服务器可能有2路或4路插槽&#xff0c;这意味着它最多可以安装2个或4个物理处理器。 核&#xff1a;单块 CPU 上面能…

Docker安装与应用

前言 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻 量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互 之间…

Spring Cloud 工程搭建服务注册_服务发现

文章目录 Spring Cloud 工程搭建服务拆分示例数据库工程搭建构建父子工程创建父工程创建子项目完成两个接口 远程调用实现添加ProductInfo字段定义RestTemplate修改OrderService 服务注册/服务发现 - Eureka注册中心CAP理论常见的注册中心ZookeeperEurekaNacos Eureka 介绍搭建…

SSM框架VUE电影售票管理系统开发mysql数据库redis设计java编程计算机网页源码maven项目

一、源码特点 smm VUE电影售票管理系统是一套完善的完整信息管理类型系统&#xff0c;结合SSM框架和VUE、redis完成本系统&#xff0c;对理解vue java编程开发语言有帮助系统采用ssm框架&#xff08;MVC模式开发&#xff09;&#xff0c;系 统具有完整的源代码和数据库&#…

vue echarts tooltip动态绑定模板,并且处理vue事件绑定

先上代码&#xff1a; tooltip: {// 这里是车辆iconshow: true,// trigger: "item",// backgroundColor: "transparent",appendToBody: true,textStyle: {color: "#ffffff" //设置文字颜色},formatter: (params) > {const TruckTooltip Vue.…

【SOP】Windows下安装Neo4j流程

Neo4j简介 Neo4j 是一个基于图形结构的 NoSQL 数据库&#xff0c;专门用于存储和管理图数据。与传统的关系型数据库不同&#xff0c;Neo4j 使用 图&#xff08;graph&#xff09;的形式来表示数据&#xff0c;其中数据点&#xff08;称为 节点&#xff09;通过 边&#xff08;…

遥感图像语义分割数据集制作(使用ArcGIS Pro)

0. 引言 图像分割就是把图像空间按照一定的要求分成一些“有意义”的区域的技术叫图像分割。一幅图像通常是由代表物体的图案与背景组成&#xff0c;简称物体与背景。若想从一幅图像中“提取”物体&#xff0c;可以设法用专门的方法标出属于该物体的点&#xff0c;如把物体上的…

WebSocket实现在线聊天室

项目实现源码&#xff1a; 前端源码 后端源码 1.常见的消息推送方式 1.1 轮询 1.1.1 轮询的概念 客户端以固定的事件间隔&#xff08;例如每秒或几分钟&#xff09;向服务器发送HTTP请求&#xff0c;服务器收到请求后&#xff0c;处理请求并返回数据给客户端 轮询具体实现htt…

计算机毕业设计之:宠物服务APP的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

如何把PDF样本册转换为网址链接

​随着互联网的普及&#xff0c;将纸质或PDF格式的样本册转化为网址链接&#xff0c;以便于在线浏览和分享&#xff0c;变得越来越重要。本文将为您详细讲解如何将PDF样本册转换为网址链接&#xff0c;让您轻松实现线上展示和分享。 一、了解PDF样本册与网址链接 1. PDF样本册…

游戏账号系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;游戏类别管理&#xff0c;游戏账号管理&#xff0c;站内联系管理&#xff0c;交易订单管理&#xff0c;帐号退货管理 微信端账号功能包括&#xff1a;系统首…

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测&#xff08;Matlab&#xff09; 目录 多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介…