文心一言 VS 讯飞星火 VS chatgpt (257)-- 算法导论19.2 1题

一、给出图19-4(m)中的斐波那契堆调用 FIB-HEAP-EXTRACT-MIN 后得到的斐波那契堆。如果要写代码,请用go语言。

文心一言:

由于我不能直接画出图19-4(m)中的斐波那契堆,我将基于斐波那契堆的基本结构和操作FIB-HEAP-EXTRACT-MIN的一般行为来描述如何更新斐波那契堆。

在斐波那契堆中,每个节点都有一个度(指向它的孩子节点的数量)、一个标记(用于合并操作)和一个键(用于确定节点的优先级)。斐波那契堆由一组根节点和一个最小节点(具有最小键值的节点)组成。

FIB-HEAP-EXTRACT-MIN操作从斐波那契堆中移除并返回具有最小键值的节点,同时更新堆的结构以保持其性质。以下是该操作的基本步骤:

如果堆为空,则报错。
否则,移除并返回最小节点。
如果最小节点有孩子节点,则将其孩子节点加入到根节点列表中,并设置它们的父节点为nil。
如果最小节点有兄弟节点(即它不是唯一的根节点),则执行合并操作:
遍历所有根节点,并将标记为true的节点的所有兄弟节点合并到该节点下。
更新合并后的节点的度。
如果在合并过程中有节点的度变为1并且其父节点不存在或者标记为false,则将该节点标记为true。
如果在合并过程中有节点的度变为0(即没有孩子节点),则将其从堆中移除。
找到新的最小节点,并更新堆的最小节点指针。
以下是一个简化的Go语言实现,仅用于说明FIB-HEAP-EXTRACT-MIN操作的基本逻辑(注意:这不是一个完整的斐波那契堆实现):

package main  
  
import (  
	"container/heap"  
	"fmt"  
)  
  
// FibNode 表示斐波那契堆中的一个节点  
type FibNode struct {  
	key   int  
	degree int  
	mark   bool  
	parent *FibNode  
	child  *FibNode // 简化起见,这里只表示一个孩子节点  
	sibling *FibNode  
}  
  
// FibHeap 表示斐波那契堆  
type FibHeap struct {  
	min *FibNode  
	// 这里可以添加其他字段,如根节点列表等  
}  
  
// FIB-HEAP-EXTRACT-MIN 的简化实现  
func (h *FibHeap) ExtractMin() *FibNode {  
	if h.min == nil {  
		return nil // 堆为空  
	}  
  
	min := h.min  
	h.min = nil // 假设这里只是简单地设置为nil,实际中需要找到新的最小节点  
  
	// 假设这里处理孩子节点和合并操作...  
	// ...  
  
	// 返回最小节点  
	return min  
}  
  
// 注意:这里省略了斐波那契堆的其他操作(如插入、合并、减小键等)  
// 以及处理孩子节点和合并操作的完整逻辑。  
  
func main() {  
	// 假设有一个斐波那契堆h,并且已经填充了数据...  
	// h := FibHeap{...}  
  
	// 提取最小节点  
	minNode := h.ExtractMin()  
	if minNode != nil {  
		fmt.Printf("Extracted min node with key: %d\n", minNode.key)  
	}  
  
	// ... 其他逻辑 ...  
}

请注意,上面的代码是一个非常简化的示例,并没有实现斐波那契堆的所有功能和细节。在实际应用中,你需要实现完整的斐波那契堆数据结构,包括节点之间的链接、根节点列表、合并操作、减小键操作等。此外,由于斐波那契堆不是Go标准库中的一部分,你可能需要自己实现堆接口(如heap.Interface)的方法或使用其他数据结构来模拟斐波那契堆的行为。

讯飞星火:

在斐波那契堆中,FIB-HEAP-EXTRACT-MIN操作会移除并返回最小元素。以下是使用Go语言实现的代码:

type Node struct {
    key   int
    rank  int
    child *Node
    next  *Node
}

type FibHeap struct {
    min      *Node
    size     int
}

func (fh *FibHeap) ExtractMin() *Node {
    z := fh.min
    if z != nil {
        for x := z.child; x != nil; x = x.next {
            fh._add(x, &fh.min)
        }
        if z == z.next {
            fh.min = nil
        } else {
            fh.min = z.next
            fh._consolidate()
        }
        fh.size -= 1
    }
    return z
}

func (fh *FibHeap) _add(x, y *Node) {
    // 省略具体实现...
}

func (fh *FibHeap) _consolidate() {
    // 省略具体实现...
}

在这个代码中,我们首先定义了节点和斐波那契堆的结构。然后实现了ExtractMin方法,该方法首先保存最小节点z,然后将z的所有子节点添加到堆中,最后从堆中删除z,并调用_consolidate方法来调整堆的结构。

360智脑:

抱歉,由于我无法看到具体的图19-4(m),所以无法直接提供调用 FIB-HEAP-EXTRACT-MIN 后得到的斐波那契堆。斐波那契堆是一种数据结构,用于实现优先队列,它通过合并操作来提取最小元素。

下面是一个简单的 Go 语言示例,展示了如何定义一个基本的斐波那契堆结构以及 FIB-HEAP-EXTRACT-MIN 函数的伪代码:

package main

import (
	"fmt"
)

type FibonacciHeap struct {
	root   *Node
	count  int
	minimum *Node
}

type Node struct {
	key    int
	value  interface{}
	parent *Node
	children []*Node
	isMarked bool
}

func (f *FibonacciHeap) ExtractMin() *Node {
	if f.root == nil {
		return nil
	}

	min := f.minimum
	if min == nil {
		return nil
	}

	// 删除最小节点并更新最小值
	f.root = merge(f.root, min)
	f.count--
	f.updateMinimum()

	// 如果最小节点的孩子不为空,则将它们链接到根列表
	if min.children != nil {
		for _, child := range min.children {
			child.parent = nil
			f.root = insert(f.root, child)
		}
	}

	return min
}

func (f *FibonacciHeap) updateMinimum() {
	var newMinimum *Node
	var visit func(*Node) bool

	visit = func(n *Node) bool {
		if n == nil {
			return false
		}

		if newMinimum == nil || n.key < newMinimum.key {
			newMinimum = n
		}

		for _, child := range n.children {
			if visit(child) {
				return true
			}
		}

		return false
	}

	visit(f.root)

	f.minimum = newMinimum
}

func insert(node *Node, child *Node) *Node {
	child.parent = node
	node.children = append(node.children, child)
	return node
}

func merge(x, y *Node) *Node {
	if x == nil {
		return y
	}
	if y == nil {
		return x
	}

	if x.key < y.key {
		x.children = append(x.children, y)
		y.parent = x
		return x
	} else {
		y.children = append(y.children, x)
		x.parent = y
		return y
	}
}

func NewFibonacciHeap() *FibonacciHeap {
	return &FibonacciHeap{
		root:   nil,
		count:  0,
		minimum: nil,
	}
}

func main() {
	// 假设我们有一个图示的斐波那契堆实例
	// 以下代码用于演示如何从该实例中提取最小元素

	fibHeap := NewFibonacciHeap()
	// 这里应该有插入元素的代码,但是由于没有图示,我们无法知道具体插入哪些元素

	// 提取最小元素
	minNode := fibHeap.ExtractMin()
	fmt.Printf("提取的最小元素为: %v\n", minNode.value)

	// 这里应该有进一步操作的代码,但是由于没有图示,我们无法知道具体做什么操作
}

请注意,上面的代码仅提供了基本的斐波那契堆结构和 ExtractMin 方法的实现,并未涵盖所有功能。在实际应用中,还需要实现其他方法,如插入元素、显示堆中的元素等。此外,根据图19-4(m)的具体内容,您可能需要调整代码以适应特定的情况。

智谱清言:

抱歉,由于您的请求中没有提供图19-4(m)中的斐波那契堆的初始结构,我无法直接给出FIB-HEAP-EXTRACT-MIN操作后的堆。斐波那契堆是一种数据结构,用于实现优先队列,其中包含多种操作,如插入、提取最小元素、减少键值等。

在Go语言中实现斐波那契堆是一个相对复杂的任务,通常涉及对斐波那契堆算法的深入理解。下面是一个简化的Go语言代码示例,展示了如何实现斐波那契堆的基本结构以及FIB-HEAP-EXTRACT-MIN操作的其中一个可能的实现。请注意,这段代码并不完整,也没有展示整个斐波那契堆的实现,而是为了展示如何开始构建此类数据结构。

package main
import (
	"fmt"
)
// 定义节点结构
type FibonacciHeapNode struct {
	key   int
	degree int
	parent *FibonacciHeapNode
	child  *FibonacciHeapNode
	left   *FibonacciHeapNode
	right  *FibonacciHeapNode
}
// 斐波那契堆结构
type FibonacciHeap struct {
	min  *FibonacciHeapNode
	root *FibonacciHeapNode
}
// 新建节点
func newNode(key int) *FibonacciHeapNode {
	return &FibonacciHeapNode{
		key:   key,
		degree: 0,
		parent: nil,
		child:  nil,
		left:   nil,
		right:  nil,
	}
}
// 插入操作
func (h *FibonacciHeap) Insert(key int) {
	newNode := newNode(key)
	if h.min == nil || key < h.min.key {
		h.min = newNode
	}
	h.root.left = newNode
	newNode.right = h.root
	h.root = newNode
}
// FIB-HEAP-EXTRACT-MIN 操作的简化版本
func (h *FibonacciHeap) ExtractMin() *FibonacciHeapNode {
	min := h.min
	if min == nil {
		return nil
	}
	// TODO: 这里需要实现完整的提取最小元素逻辑
	// 包括重新组织斐波那契堆,合并子树等操作
	return min
}
func main() {
	heap := &FibonacciHeap{}
	heap.Insert(10)
	heap.Insert(15)
	heap.Insert(5)
	heap.Insert(3)
	min := heap.ExtractMin()
	fmt.Println("Extracted min:", min.key)
}

请注意,上述代码仅为示例,FIB-HEAP-EXTRACT-MIN操作的完整实现涉及到复杂的逻辑,包括合并子树、重新平衡堆等。完整的斐波那契堆实现需要更多的时间和空间来展示。
如果您需要关于如何实现整个斐波那契堆的详细指导或者具体的代码示例,请提供更多的上下文或者具体的请求。

天工:

以下是使用Go语言实现的斐波那契堆(Fibonacci heap)的FIB-HEAP-EXTRACT-MIN函数的代码:

package fibheap

import "fmt"

type node struct {
	key   int
	parent *node
	childs []*node
	degree int
}

func (n *node) String() string {
	return fmt.Sprintf("Node{key: %d, parent: %p, childs: %v, degree: %d}", n.key, n.parent, n.childs, n.degree)
}

type fibHeap struct {
	min    *node
	size   int
	nodes  map[*node]*node // 反向映射,方便查找节点
}

func (fh *fibHeap) add(n *node) {
	if n.key < fh.min.key {
		fh.min = n
	}
	fh.nodes[n] = n
	fh.size++
}

func (fh *fibHeap) removeMin() *node {
	min := fh.min
	delete(fh.nodes, min)
	fh.size--
	return min
}

// 这里只是一个示例,实际的FIB-HEAP-EXTRACT-MIN函数需要更复杂的逻辑来处理节点的合并等操作
func (fh *fibHeap) FIBHEAP_EXTRACT_MIN() *node {
	min := fh.removeMin()
	return min
}

// 创建一个空的斐波那契堆
func NewFibonacciHeap() *fibHeap {
	return &fibHeap{
		min:    nil,
		size:   0,
		nodes:  make(map[*node]*node),
	}
}

// 测试代码
func main() {
	// 创建一个空的斐波那契堆
	fh := NewFibonacciHeap()

	// 添加一些节点到斐波那契堆中
	for i := 0; i < 10; i++ {
		n := &node{key: i}
		fh.add(n)
	}

	// 提取最小元素
	min := fh.FIBHEAP_EXTRACT_MIN()
	fmt.Println("Extracted minimum:", min)
}

请注意,这段代码只是一个简单的示例,它并没有完全实现斐波那契堆的所有特性,比如节点的合并等操作。实际的FIB-HEAP-EXTRACT-MIN函数需要更复杂的逻辑来处理这些情况。此外,为了简化代码,我在这里假设了一个全局的fibHeap变量fh,并将其作为参数传递给了FIBHEAP_EXTRACT_MIN函数。在实际应用中,你可能需要将fibHeap作为一个对象来处理。

灵小智:

很抱歉,我不能直接提供图像或编写代码。但是,我可以告诉你如何使用Go语言实现斐波那契堆和FIB-HEAP-EXTRACT-MIN操作。

首先,你需要定义一个结构体来表示斐波那契堆的节点:

type Node struct {
    key     int
    degree  int
    parent  *Node
    child   *Node
    left    *Node
    right   *Node
    mark    bool
}

接下来,你可以创建一个斐波那契堆的结构体:

type FibonacciHeap struct {
    min     *Node
    count   int
}

然后,你可以实现FIB-HEAP-EXTRACT-MIN操作:

func (h *FibonacciHeap) extractMin() *Node {
    z := h.min
    if z != nil {
        // 将z的子节点添加到根列表中
        if z.child != nil {
            child := z.child
            for i := 0; i < z.degree; i++ {
                temp := child.right
                
                // 移除子节点
                child.left.right = child.right
                child.right.left = child.left
                
                // 将子节点添加到根列表
                child.left = h.min
                child.right = h.min.right
                h.min.right = child
                child.right.left = child
                
                // 更新子节点的父指针
                child.parent = nil
                
                child = temp
            }
        }
        
        // 从根列表中移除z
        z.left.right = z.right
        z.right.left = z.left
        
        if z == z.right {
            h.min = nil
        } else {
            h.min = z.right
            h.consolidate()
        }
        
        h.count--
    }
    
    return z
}

这只是一个简单的示例,你还需要实现其他斐波那契堆操作(例如插入、合并等),以及相应的测试代码来构建和使用斐波那契堆。希望这可以帮助到你开始使用Go语言编写斐波那契堆。

chatgpt:

很抱歉,作为纯文本AI助手,我无法直接提供图片。关于斐波那契堆的图示和相关代码,您可以在学习资料、教科书或网络上进行查找。以下是一个用Go语言实现斐波那契堆的例子:

package main

import (
	"fmt"
)

// 斐波那契堆节点结构
type FibHeapNode struct {
	key      int           // 键值
	children []*FibHeapNode // 孩子节点列表
	parent   *FibHeapNode  // 父节点
	marked   bool          // 是否被剪切过标记
}

// 斐波那契堆结构
type FibHeap struct {
	min     *FibHeapNode // 最小节点指针
	num     int          // 堆中节点数量
	maxRank int          // 堆中最大度数(根节点的度数)
}

// 创建一个空的斐波那契堆
func NewFibHeap() *FibHeap {
	return &FibHeap{}
}

// 插入一个新键值到斐波那契堆中
func (h *FibHeap) Insert(key int) {
	node := &FibHeapNode{
		key:      key,
		children: nil,
		parent:   nil,
		marked:   false,
	}

	if h.min == nil { // 如果堆为空,则直接将新节点设为最小节点,并成为孤立根节点
		h.min = node
		node.parent = node
		node.children = make([]*FibHeapNode, 0)
	} else {
		h.mergeTrees(node) // 合并两个根链表
		if key < h.min.key {
			h.min = node // 更新最小节点指针
		}
	}

	h.num++ // 节点数量加一
}

// 合并两个斐波那契堆的根链表
func (h *FibHeap) mergeTrees(newNode *FibHeapNode) {
	rootList := h.min.children // 原有的根链表

	if rootList == nil { // 如果原有的根链表为空,直接将新节点添加为唯一元素
		newNode.parent = newNode
		newNode.children = make([]*FibHeapNode, 0)
	} else { // 将新节点添加到根链表中,并调整父子关系和度数
		rootList = append(rootList, newNode)
		newNode.parent = newNode

		if newNode.key < h.min.key {
			h.min = newNode // 更新最小节点指针
		}
	}

	h.maxRank++
}

// 提取斐波那契堆中的最小键值节点,并重新调整堆结构保持性质不变
func (h *FibHeap) ExtractMin() (*FibHeapNode, error) {
	min := h.min

	if min == nil {
		return nil, fmt.Errorf("The heap is empty")
	}

	for _, child := range min.children { // 将最小节点的孩子们成为孤立根节点,并更新其父指针为自己
		child.parent = child
	}

	rootList := append(h.min.children, h.min) // 将最小节点和其孩子们组成新的根链表

	if len(rootList) == 1 { // 如果只有一个根节点,直接更新最小节点指针为该唯一节点,并清空根链表
		h.min = rootList[0]
	} else {
		h.consolidate(rootList) // 合并根链表中度数相同的树,并更新最小节点指针
	}

	h

kimi:

斐波那契堆(Fibonacci Heap)是一种用于实现优先队列的数据结构,它由Michael L. Fredman和Robert E. Tarjan在1984年提出。斐波那契堆在最坏情况下的平摊时间复杂度为O(1),这使得它在某些应用中非常有用,如Dijkstra算法或某些图算法。

在斐波那契堆中,FIB-HEAP-EXTRACT-MIN操作会移除并返回具有最小键值的节点。这个操作可能涉及以下步骤:

  1. 移除最小节点。
  2. 将最小节点的子树添加到根节点列表中。
  3. 执行堆的合并过程,以合并具有相同度数的根节点。

由于图19-4(m)没有直接提供在这里,我将无法准确地描述执行FIB-HEAP-EXTRACT-MIN操作后得到的斐波那契堆的具体结构。然而,我可以提供一个Go语言的示例代码,用于实现斐波那契堆的FIB-HEAP-EXTRACT-MIN操作:

package main

import (
	"fmt"
)

type FibHeapNode struct {
	key     int
	degree  int
	mark    bool
	parent  *FibHeapNode
	child   *FibHeapNode
	left    *FibHeapNode
	right   *FibHeapNode
}

type FibHeap struct {
	min     *FibHeapNode
	roots   []*FibHeapNode
	size    int
}

func NewFibHeap() *FibHeap {
	return &FibHeap{
		min:    nil,
		roots:  make([]*FibHeapNode, 0),
		size:   0,
	}
}

func (h *FibHeap) ExtractMin() *FibHeapNode {
	if h.min == nil {
		return nil
	}

	min := h.min
	h.removeNode(h.min)

	// 将最小节点的子树添加到根节点列表中
	for min.child != nil {
		temp := min.child
		min.child = temp.right
		temp.parent = nil
		h.roots = append(h.roots, temp)
		temp.left = temp
		temp.right = temp
	}

	h.consolidate()

	h.size--

	return min
}

func (h *FibHeap) removeNode(node *FibHeapNode) {
	if node == nil {
		return
	}

	if node == h.min {
		h.min = node.right

		if node == node.right {
			h.min = nil
		} else {
			for h.min.parent != nil {
				h.min = h.min.right
			}
		}
	}

	if node.parent != nil {
		h.removeChild(node.parent, node)
		node.parent = nil
	}

	if node.left != nil {
		node.left.right = node.right
	}
	if node.right != nil {
		node.right.left = node.left
	}
}

func (h *FibHeap) removeChild(parent *FibHeapNode, node *FibHeapNode) {
	if parent.child == node {
		parent.child = node.right
	}

	node.left.right = node.right
	node.right.left = node.left
}

func (h *FibHeap) consolidate() {
	// 合并具有相同度数的根节点
	// 这里省略了具体的合并逻辑
}

func main() {
	h := NewFibHeap()
	// 假设 h 已经被构建并包含了一些节点

	minNode := h.ExtractMin()
	if minNode != nil {
		fmt.Printf("Extracted min node with key: %d\n", minNode.key)
	} else {
		fmt.Println("Heap is empty")
	}
}

在这个Go语言程序中,我们定义了FibHeapNode结构体来表示斐波那契堆中的节点,并提供了FibHeap结构和ExtractMin方法来实现斐波那契堆的最小值提取操作。removeNode方法用于从根节点列表中移除节点,removeChild方法用于从父节点的子树中移除节点。

请注意,这个程序是一个简化的示例,它没有实现consolidate方法中的具体合并逻辑,也没有包括节点插入和度更新的逻辑。在实际应用中,斐波那契堆的实现会更加复杂。

混元:

在这个问题中,我们需要执行 FIB-HEAP-EXTRACT-MIN 操作来从给定的斐波那契堆中提取最小元素。首先,我们需要了解斐波那契堆的数据结构和操作。

斐波那契堆是一种优先队列数据结构,它的每个节点都有一个关键字值。斐波那契堆的主要操作包括插入、合并、查找最小元素和提取最小元素。

以下是用 Go 语言实现 FIB-HEAP-EXTRACT-MIN 操作的代码:

package main

import (
	"fmt"
	"math"
)

type FibonacciHeapNode struct {
	Key      int
	Degree   int
	Parent   *FibonacciHeapNode
	Child    *FibonacciHeapNode
	Left     *FibonacciHeapNode
	Right    *FibonacciHeapNode
	Mark     bool
}

type FibonacciHeap struct {
	Min    *FibonacciHeapNode
	Num    int
}

func NewFibonacciHeap() *FibonacciHeap {
	return &FibonacciHeap{nil, 0}
}

func (h *FibonacciHeap) Insert(x int) {
	node := &FibonacciHeapNode{x, 0, nil, nil, nil, nil, false}
	if h.Min == nil {
		node.Left = node
		node.Right = node
		h.Min = node
	} else {
		node.Left = h.Min
		node.Right = h.Min.Right
		h.Min.Right = node
		node.Right.Left = node
		if x < h.Min.Key {
			h.Min = node
		}
	}
	h.Num++
}

func (h *FibonacciHeap) ExtractMin() int {
	min := h.Min
	if min != nil {
		if min.Child != nil {
			child := min.Child
			for {
				next := child.Right
				child.Left.Right = child.Right
				child.Right.Left = child.Left
				child.Left = h.Min
				child.Right = h.Min.Right
				h.Min.Right = child
				child.Right.Left = child
				child.Parent = nil
				if next == min.Child {
					break
				}
				child = next
			}
		}
		min.Left.Right = min.Right
		min.Right.Left = min.Left
		if min == min.Right {
			h.Min = nil
		} else {
			h.Min = min.Right
			h.Consolidate()
		}
		h.Num--
	}
	return min.Key
}

func (h *FibonacciHeap) Consolidate() {
	A := make([]*FibonacciHeapNode, h.Num)
	w := h.Min
	for {
		x := w
		d := x.Degree
		for A[d] != nil {
			y := A[d]
			if x.Key > y.Key {
				x, y = y, x
			}
			h.Link(y, x)
			A[d] = nil
			d++
		}
		A[d] = x
		if w == w.Right {
			break
		}
		w = w.Right
	}
	h.Min = nil
	for _, n := range A {
		if n != nil {
			if h.Min == nil {
				n.Left = n
				n.Right = n
				h.Min = n
			} else {
				n.Left = h.Min
				n.Right = h.Min.Right
				h.Min.Right = n
				n.Right.Left = n
				if n.Key < h.Min.Key {
					h.Min = n
				}
			}
		}
	}
}

func (h *FibonacciHeap) Link(y, x *FibonacciHeapNode) {
	y.Left.Right = y.Right
	y.Right.Left = y.Left
	y.Parent = x
	if x.Child == nil {
		x.Child = y
		y.Right = y
		y.Left = y
	} else {
		y.Left = x.Child
		y.Right = x.Child.Right
		x.Child.Right = y
		y.Right.Left = y
	}
	x.Degree++
	y.Mark = false
}

func main() {
	h := NewFibonacciHeap()
	h.Insert(10)
	h.Insert(2)
	h.Insert(5)
	h.Insert(1)
	h.Insert(12)
	h.Insert(7)
	h.Insert(15)
	h.Insert(3)
	h.Insert(4)
	h.Insert(11)
	h.Insert(8)
	h.Insert(6)
	h.Insert(14)
	h.Insert(9)

	fmt.Println("Before extract min:")
	for w := h.Min; ; w = w.Right {
		fmt.Printf("%d ", w.Key)
		if w == w.Right {
			break
		}
	}
	fmt.Println()

	min := h.ExtractMin()
	fmt.Printf("Min: %d\n", min)

	fmt.Println("After extract min:")
	for w := h.Min; ; w = w.Right {
		fmt.Printf("%d ", w.Key)
		if w == w.Right {
			break
		}
	}
	fmt.Println()
}

在这个代码中,我们首先创建了一个新的斐波那契堆,并插入了一些元素。然后我们调用 ExtractMin 方法来提取最小元素。最后,我们打印出提取最小元素前后的斐波那契堆。

请注意,这个代码示例仅用于演示目的。在实际应用中,您可能需要根据您的需求对代码进行调整。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTPS对于网站到底价值几何?

现在HTTPS基本上已经是网站的标配了&#xff0c;很少会遇到单纯使用HTTP的网站。但是十年前这还是另一番景象&#xff0c;当时只有几家大型互联网公司的网站会使用HTTPS&#xff0c;大部分使用的都还是简单的HTTP&#xff0c;这一切是怎么发生的呢&#xff1f; 为什么要把网站…

根据蛋白质序列,计算其分子量(molecular weight),在线工具,原理和python代码

蛋白质分子量 蛋白质是由许多氨基酸残基通过肽键&#xff08;一个氨基酸的 α-羧基与另一个氨基酸的 α-氨基脱水缩合形成的化学键&#xff09;连接而成。蛋白质的分子量&#xff08;molecular weight&#xff09;为各个氨基酸的分子量之和&#xff0c;是蛋白质的重要理化参数…

速戳!高考生做近视手术须知,避免错过心仪大学

距离高考还有不到一个月的时间&#xff0c;考生们在紧张复习的同时&#xff0c;不要忘了了解意向专业、院校的视力要求。一些专业和院校录取不仅靠实力,还需要“视力”,考了个好成绩却因视力不达标而被专业、院校退档,这样的结果是我们不想看到的。如果你想圆军旅梦、警校梦、航…

面向对象设计(下)《Ⅱ》

文章目录 抽象类抽象类的理解&#xff08;抽象类不能实例化&#xff09; 设计模式模板方法设计模式代理模式工厂方法设计模式 接口接口的定义&#xff08;接口仅可以用public修饰&#xff09;接口的实现jdk1.8中接口的默认方法和静态方法 内部类成员内部类静态成员内部类的创建…

timerfd加epoll封装定时器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、用timerfd加epoll封装定时器的优点2、代码实现 1、用timerfd加epoll封装定时器的优点 定时器为什么需要timerfd 在设计定时器时&#xff0c;我们首先想到的就是…

HNU-操作系统OS-2024期中考试

前言 该卷为22计科/智能OS期中考卷。 感谢智能22毕宿同学记忆了考卷考题。 同学评价&#xff1a;总体简单&#xff1b;第1&#xff0c;7概念题较难需要看书&#xff1b;第4&#xff0c;5题原题。 欢迎同学分享答案。 【1】共10分 操作系统的设计目标有哪些&#xff1f; 【…

Attention-guided Feature Distillation for Semantic Segmentation

摘要 与现有的复杂方法相比&#xff0c;该方法通常用于从老师那里提取知识给学生&#xff0c;该方法展示了一种简单而强大的方法&#xff0c;可以利用精细的特征映射来转移注意力。事实证明&#xff0c;该方法在提取丰富信息方面是有效的&#xff0c;在作为密集预测任务的语义…

springfox.documentation.spi.DocumentationType没有OAS_30(从swagger2转到swagger3出现的问题)

直接开讲&#xff1a; 查看源码根本没有OAS_30的类型选择 右键package的springfox找到maven下载的包&#xff0c;打开到资源管理器 可以看到项目优先使用2版本的jar包&#xff0c;但是OAS_30只在3版本中才有&#xff0c;意思就是让项目优先使用以下图片中的3.0.0jar包 解决办法…

智能文件夹改名助手:一键秒级恢复原始名称,轻松告别繁琐操作,提升文件管理效率

文件夹管理成为了我们日常工作和生活中不可或缺的一部分。然而&#xff0c;随着文件数量的不断增加和文件夹命名的复杂性&#xff0c;我们经常面临着重命名文件夹的繁琐操作。你是否曾经因为误改文件夹名称而头疼不已&#xff1f;是否曾经为了找回原始名称而耗费大量时间&#…

docker容器实现https访问

前言&#xff1a; 【云原生】docker容器实现https访问_docker ssl访问-CSDN博客 一术语介绍 ①key 私钥 明文--自己生成&#xff08;genrsa &#xff09; ②csr 公钥 由私钥生成 ③crt 证书 公钥 签名&#xff08;自签名或者由CA签名&#xff09; ④证书&#xf…

【Java】:向上转型、向下转型和ClassCastException异常

目录 先用一个生动形象的例子来解释向上转型和向下转型 向上转型&#xff08;Upcasting&#xff09; 向下转型&#xff08;Downcasting&#xff09; 向上转型 概念 例子 发生向上转型的情况 1.子类对象赋值给父类引用 2.方法参数传递 3.返回值 向下转型 概念 注意…

SpringSecurity的核心原理使用总结

1. SpringSecurity的核心原理 对于最原始Servlet请求处理的层次结构 客户端->过滤器链->Servlet 对于在SpringMVC中处理请求的层次结构 如何让Filter与Spring建立连接呢? 因此它增加了一个DelegatingFilterProxy 它是SpringMVC提供的的Filter,它内部代理了一个原生的F…

代码随想录——二叉树的层序遍历(Leetcode102)二叉树层序遍历的模板

题目链接 层序遍历&#xff08;队列&#xff09; 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用…

java项目之企业OA管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业OA管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 企业OA管理系统的主要使用…

搭建Springboot的基础开发框架-02

本系列专题虽然是按教学的深度来定稿的&#xff0c;但在项目结构和代码组织方面是按公司系统的要求来书定的。在本章中主要介绍下基础开发框架的功能。后续所有章节的项目全是在本基础框架的基础上演进的。 工程结构介绍 SpringbootSeries&#xff1a;父工程&#xff0c;定义一…

语言:C#

一、VSCode生成exe 二、

【计算机毕业设计】基于微信小程序校园服务平台

随着 计算机技术的成熟&#xff0c;互联网的建立&#xff0c;如今&#xff0c;PC平台上有许多关于校园服务方面的应用程序&#xff0c;但由于使用时间和地点上的限制&#xff0c;用户在使用上存在着种种不方便&#xff0c;而开发一款基于微信小程序的校园服务平台&#xff0c;能…

Loongnix系统替换内核操作

Loongnix系统替换内核操作 一、终端下执行命令 sudo apt search linux-image* 返回结果中格式如: linux-image-4.19.0-19-loongson-3 为最新的内核源码。 二、下载内核源码包 sudo apt source linux-image-4.19.0-19-loongson-3 如提示&#xff1a;E: 您必须在 sources.li…

文件系统(未打开的文件)

之前我们讲述的一些文件操作都是在文件被打开的基础上的&#xff0c;因为用户想要对某个文件做操作的话&#xff0c;这个文件一定是被打开的&#xff0c;也就是一定是内存级的文件。 但是有的没有被操作的文件&#xff0c;是在磁盘中的&#xff0c;我们的笔记本是在SSD中&…

红米K60Pro/K50/K40系列澎湃OS解锁BL降级出厂MIUI14稳定版本方法

最新红米K60/60pro/K50/K50至尊/K40等多个系列手机都已经推送了澎湃OS系统&#xff0c;但新版的系统适配周期短或者等其他原因&#xff0c;导致很多小伙伴希望降级回到MIUI14系统&#xff0c;多个小米售后都拒绝降级服务&#xff0c;并且官方也没有开通1个自助降级的方法&#…