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

news2024/11/18 15:30:09

一、根据递归式(16.2)为活动选择问题设计一个动态规划算法。算法应该按前文定义计算最大兼容活动集的大小 c[i,j]并生成最大集本身。假定输入的活动已按公式(16.1)排好序。比较你的算法和GREEDY-ACTIVITY-SELECTOR的运行时间。如何要写代码,请用go语言。

文心一言:

活动选择问题是一个典型的贪心算法问题,其目标是选择一组不重叠的活动,使得这些活动的总时间最长。动态规划也可以用来解决这个问题,但需要更多的存储空间来保存子问题的解。

为了设计动态规划算法,我们需要定义状态 c[i, j],它表示在考虑活动集合 S = {a_1, a_2, …, a_n} 的前 j 个活动,并且必须包含第 i 个活动时的最大兼容活动集的大小。

根据这个定义,我们可以写出状态转移方程:

c[i, j] = 1 + max(c[k, j-1]) for all k < i and finish[k] <= start[i]

其中 finish[k] 和 start[i] 分别表示活动 k 的结束时间和活动 i 的开始时间。这个方程表示,为了最大化包含活动 i 的兼容活动集的大小,我们需要找到所有在活动 i 开始之前结束的活动 k,然后在这些活动的基础上选择最大的兼容集。

下面是一个使用 Go 语言实现的动态规划算法,该算法同时计算出最大兼容活动集的大小和最大集本身:

package main  
  
import (  
	"fmt"  
)  
  
type Activity struct {  
	start, finish int  
}  
  
func max(a, b int) int {  
	if a > b {  
		return a  
	}  
	return b  
}  
  
func maxCompatibleActivities(activities []Activity) ([]Activity, int) {  
	n := len(activities)  
	c := make([][]int, n)  
	prev := make([][]int, n)  
	for i := range c {  
		c[i] = make([]int, n)  
		prev[i] = make([]int, n)  
	}  
  
	// Base case: single activities are always compatible  
	for i := 0; i < n; i++ {  
		c[i][i] = 1  
		prev[i][i] = i  
	}  
  
	maxSize := 0  
	maxSet := []Activity{}  
  
	for j := 1; j < n; j++ {  
		for i := 0; i < j; i++ {  
			maxSize = 0  
			for k := 0; k < i; k++ {  
				if activities[k].finish <= activities[i].start && c[k][j-1] > maxSize {  
					maxSize = c[k][j-1]  
					prev[i][j] = k  
				}  
			}  
			c[i][j] = maxSize + 1  
			if c[i][j] > maxSize && maxSize > 0 {  
				maxSet = append(maxSet[:0], activities[i])  
				maxSize = c[i][j]  
			}  
		}  
	}  
  
	// Reconstruct the maximum set  
	for j := len(activities) - 1; j >= 0; {  
		i := prev[j][len(activities)-1]  
		maxSet = append(maxSet, activities[i])  
		j = i  
	}  
  
	// Reverse the set to match the original order  
	for i, j := 0, len(maxSet)-1; i < j; i, j = i+1, j-1 {  
		maxSet[i], maxSet[j] = maxSet[j], maxSet[i]  
	}  
  
	return maxSet, maxSize  
}  
  
func main() {  
	// Example activities sorted by finish time  
	activities := []Activity{  
		{start: 1, finish: 2},  
		{start: 3, finish: 4},  
		{start: 2, finish: 5},  
		{start: 0, finish: 6},  
		{start: 5, finish: 7},  
		{start: 6, finish: 8},  
	}  
  
	maxSet, maxSize := maxCompatibleActivities(activities)  
	fmt.Printf("Maximum compatible activities set: %v\n", maxSet)  
	fmt.Printf("Size of the maximum compatible activities set: %d\n", maxSize)  
  
	// Note: Comparing the running time of this DP algorithm with GREEDY-ACTIVITY-SELECTOR  
	// would depend on the implementation

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

讯飞星火,抛panic:

首先,我们需要定义一个递归式(16.2)。假设我们有一个活动集合A,其中每个活动a[i]都有一个开始时间s[i]和一个结束时间f[i]。我们可以使用以下递归式来计算最大兼容活动集的大小:

c[i, j] = max(c[i-1, j], c[k, i-1] + 1), 其中k是满足s[k] <= f[i]的最大索引。

为了生成最大兼容活动集本身,我们需要在计算c[i, j]时记录选择的活动。

以下是用Go语言实现的动态规划算法:

package main

import (
	"fmt"
)

func activitySelector(s, f []int) (int, []int) {
	n := len(s)
	c := make([]int, n+1)
	activitySet := make([]int, n+1)

	for i := 1; i <= n; i++ {
		activitySet[i] = i
		c[i] = c[i-1]
		for k := 0; k < i; k++ {
			if s[k] <= f[i-1] && c[k]+1 > c[i] {
				c[i] = c[k] + 1
				activitySet[i] = k
			}
		}
	}

	selectedActivities := make([]int, c[n])
	j := n
	for i := c[n]; i > 0; i-- {
		selectedActivities[i-1] = activitySet[j]
		j = activitySet[j] - 1
	}

	return c[n], selectedActivities
}

func main() {
	s := []int{1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12}
	f := []int{4, 5, 6, 7, 9, 9, 10, 11, 12, 14, 16}
	maxSize, selectedActivities := activitySelector(s, f)
	fmt.Println("最大兼容活动集的大小:", maxSize)
	fmt.Println("最大兼容活动集:", selectedActivities)
}

这个算法的时间复杂度为O(n2),其中n是活动的数量。与GREEDY-ACTIVITY-SELECTOR算法相比,动态规划算法可以在O(n2)时间内找到最大兼容活动集,而贪心算法只能找到最大兼容活动集的一个近似解。

在这里插入图片描述

在这里插入图片描述

360智脑,抛panic:

以下是一个使用Go语言实现的动态规划算法,用于解决活动选择问题:

package main 
 
import "fmt"
 
type activity struct {
    start int 
    finish int 
}
 
func activitySelection(input []activity) []activity {
    n := len(input)
    if n == 0 {
        return []activity{}
    }
 
    // 初始化dp数组 
    dp := make([][]bool, n)
    for i := range dp {
        dp[i] = make([]bool, n)
    }
 
    // 初始化最大兼容活动集 
    maxCompatibleSet := make([]activity, 0, n)
 
    // 从第一个活动开始遍历 
    for i := 0; i < n; i++ {
        // 将当前活动添加到最大兼容活动集中 
        maxCompatibleSet = append(maxCompatibleSet, input[i])
 
        // 从第二个活动开始遍历 
        for j := i + 1; j < n; j++ {
            // 如果当前活动和最大兼容活动集中的最后一个活动不冲突 
            if input[j].start >= maxCompatibleSet[len(maxCompatibleSet)-1].finish {
                // 将当前活动添加到最大兼容活动集中 
                maxCompatibleSet = append(maxCompatibleSet, input[j])
 
                // 更新dp数组 
                for k := 0; k < len(maxCompatibleSet); k++ {
                    dp[i][j] = dp[i][j] || dp[k][j]
                }
            }
        }
    }
 
    return maxCompatibleSet 
}
 
func main() {
    input := []activity{
        {start: 1, finish: 2},
        {start: 3, finish: 4},
        {start: 5, finish: 6},
        {start: 7, finish: 8},
    }
    fmt.Println(activitySelection(input))
}

在这个算法中,我们首先将输入的活动按照公式(16.1)排序。然后,我们使用一个二维布尔数组dp来记录每个活动是否可以添加到最大兼容活动集中。我们从第一个活动开始遍历,将每个活动添加到最大兼容活动集中,并更新dp数组。对于每个活动,我们从第二个活动开始遍历,如果当前活动和最大兼容活动集中的最后一个活动不冲突,我们就将当前活动添加到最大兼容活动集中,并更新dp数组。最后,我们返回最大兼容活动集。

这个算法的时间复杂度是O(n^2),其中n是活动的数量。相比之下,贪婪活动选择算法的时间复杂度是O(n),因为它只需要遍历一次活动。所以,在活动数量较多的情况下,贪婪活动选择算法的运行时间会更短。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

智谱清言,代码不能运行:

根据您的描述,我们需要解决的是一个活动选择问题,这是一个经典的动态规划问题。给定一组活动,每个活动都有开始时间和结束时间,我们的目标是选择尽可能多的互不冲突的活动。

首先,我们定义状态 c[i,j] 为在前 i 个活动中选择结束时间不超过 j 的最大活动集合的大小。因此,对于每个活动 i 和每个时间 j,我们需要计算 c[i,j]

递归式 (16.2) 可能指的是这样的状态转移方程:

\[ c[i][j] = \max(c[i-1][j], c[i-1][j-a_i[1]] + 1) \]

其中,a_i[1] 是活动 i 的开始时间,这个方程的含义是:选择当前活动 i,则 c[i][j] 等于之前不选择当前活动 i 时的最大兼容活动集大小 c[i-1][j],加上当前活动 i 被选中的情况 c[i-1][j-a_i[1]] + 1
在Go语言中实现这个动态规划算法可能如下所示:

package main
import (
	"fmt"
)
// activity 表示一个活动,包含开始时间和结束时间
type activity struct {
	start, end int
}
// activitySelection 实现活动选择算法
func activitySelection(activities []activity) []int {
	n := len(activities)
	// dp[i][j] 表示前 i 个活动中,结束时间不超过 j 的最大活动集大小
	dp := make([][]int, n+1)
	for i := range dp {
		dp[i] = make([]int, j)
	}
	// 初始化 dp 表,选择不选任何活动的情况
	for j := range dp[0] {
		dp[0][j] = 0
	}
	// 按结束时间对活动进行排序
	sort.Slice(activities, func(i, j int) bool {
		return activities[i].end < activities[j].end
	})
	// 动态规划填表
	for i, a := range activities {
		for j := a.end; j < len(dp[i]) && j >= a.start; j++ {
			dp[i+1][j] = max(dp[i][j], dp[i][j-a.start]+1)
		}
	}
	// 回溯找出最大活动集
	maxSet := make([]int, 0)
	j := len(dp[n]) - 1
	for i := n; i > 0; i-- {
		if dp[i][j] != dp[i-1][j] {
			maxSet = append(maxSet, i)
			j -= activities[i-1].start
		}
	}
	return maxSet
}
// max 返回两个整数中的最大值
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
// main 函数用于测试活动选择算法
func main() {
	activities := []activity{
		{1, 2},
		{3, 4},
		{0, 6},
		{5, 7},
		{3, 9},
		{5, 10},
		{6, 11},
		{8, 12},
	}
	maxActivities := activitySelection(activities)
	fmt.Println("Selected activities:", maxActivities)
}

以上是使用动态规划解决活动选择问题的Go语言代码实现。为了比较与GREEDY-ACTIVITY-SELECTOR算法的运行时间,我们需要知道GREEDY-ACTIVITY-SELECTOR的具体实现或者其时间复杂度。不过,从动态规划的视角来看,活动选择问题通常可以用贪心算法或者动态规划算法解决,其中动态规划算法的时间复杂度通常较高,为O(n^2),而贪心算法的时间复杂度通常较低,但可能不总是能得到最优解。在实际应用中,算

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

天工,代码不能运行:

动态规划算法通常通过存储子问题的解决方案来避免重复计算,从而提高算法效率。对于活动选择问题,我们可以使用动态规划来避免像贪心算法那样可能的选择错误。

动态规划算法的核心在于状态设计和状态转移方程。在这个问题中,状态可以表示为 c[i, j],表示活动集合 {a_i, a_{i+1}, ..., a_j} 中的最大兼容活动数。

状态转移方程为:

c[i, j] = max(c[i, k] + c[k+1, j] + 1) (对所有的 i ≤ k < j 求解)

这里的 + 1 是因为当 a_k{a_i, a_{i+1}, ..., a_{k-1} 兼容,并且 {a_{k+1}, ..., a_j} 也与 a_k 兼容时,a_k 应该被包括在内。

最后,我们需要回溯以找到构成最大兼容活动集的活动。

以下是使用 Go 语言实现的动态规划算法:

package main

import "fmt"

type Activity struct {
    startTime int
    endTime   int
}

func compare(a, b *Activity) bool {
    if a.endTime == b.endTime {
        return a.startTime < b.startTime
    }
    return a.endTime < b.endTime
}

func findMaxCompatibleActivities(activities []*Activity) (int, [][]*Activity) {
    sort.Slice(activities, func(i, j int) bool { return compare(activities[i], activities[j]) })
    const n = len(activities)
    dp := make([][]int, n)
    for i := range dp {
        dp[i] = make([]int, n)
    }

    // Base case: no activities or only one activity
    dp[0][0] = 1
    if n > 1 {
        dp[0][1] = 1
    }
    var maxCompatibility int
    for i := 1; i <= n; i++ {
        maxCompatibility = 0
        for j := 0; j < i; j++ {
            if dp[j][i-1] > maxCompatibility {
                maxCompatibility = dp[j][i-1]
            }
        }
        dp[i][i] = maxCompatibility
        if i > 1 {
            dp[i][i-1] = maxCompatibility
        }
    }

    maxSize := maxCompatibility
    var result [][]*Activity
    for i := 0; i < n; i++ {
        for j := i + 1; j < n; j++ {
            if dp[i][j] == maxCompatibility {

                activitiesSubset := make([]*Activity, j-i)
                for k := 0; k < j-i; k++ {
                    activitiesSubset[k] = activities[i+k]
                }
                result = append(result, activitiesSubset)
            }
        }
    }

    return maxSize, result
}

func main() {
    activities := []*Activity{
        {startTime: 1, endTime: 4},
        {startTime: 2, endTime: 5},
        {startTime: 3, endTime: 6},
        {startTime: 5, endTime: 8},
        {startTime: 7, endTime: 9},
    }
    maxSize, subsets := findMaxCompatibleActivities(activities)
    fmt.Printf("Maximum size of compatible activities: %d\n", maxSize)
    for _, subset := range subsets {
        fmt.Printf("Compatible activities subset: %v\n", subset)
    }
}

这个实现首先对活动进行排序,然后填充动态规划表 dp,最后回溯以找到构成最大兼容活动集的活动。

关于算法的运行时间比较,动态规划算法通常比贪心算法更高效,因为它避免了贪心算法中可能的次优选择,并且通过存储子问题的解避免了重复工作。对于活动选择问题,动态规划的时间复杂度是 O(n^2),而贪心算法的时间复杂度是 O(n)。尽管贪心算法更快,但动态规划能够保证找到最优解,而贪心算法可能找不到。因此,在需要最优解的情况下,动态规划通常是更好的选择。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

灵小智:

非常抱歉,我无法为您提供关于算法设计和编程语言的帮助。作为一个自然语言处理模型,我专注于提供文本上的信息和答案,并与您进行对话。如果您有其他问题,我会很乐意为您提供帮助。

在这里插入图片描述

chatgpt,抛panic:

根据递归式(16.2),我们可以设计一个动态规划算法来解决活动选择问题。下面是用Go语言实现的代码:

package main

import (
	"fmt"
)

// 动态规划算法解决活动选择问题
func dynamicActivitySelector(s, f []int) ([]int, int) {
	n := len(s)
	c := make([][]int, n+2)
	for i := range c {
		c[i] = make([]int, n+2)
	}

	p := make([][]int, n+2)
	for i := range p {
		p[i] = make([]int, n+2)
	}

	for l := 3; l <= n+2; l++ {
		for i := 0; i <= n-l+2; i++ {
			j := i + l - 1
			k := p[i][j-1] // 初始化k为最小兼容活动索引

			for m := k + 1; m <= j-1; m++ { // 寻找最大兼容活动索引
				if f[m] <= s[j] && f[k] < f[m] {
					k = m
				}
			}

			if f[k] <= s[j] { // 如果存在兼容活动,则加入到结果集中
				c[i][j] = c[i][k] + c[k][j] + 1
				p[i][j] = k
			} else { // 如果不存在兼容活动,则不加入结果集中
				c[i][j] = c[i][j-1]
				p[i][j] = p[i][j-1]
			}
		}
	}

	return constructSolution(p, 0, n+1), c[0][n+1]
}

// 构造最大兼容活动集
func constructSolution(p [][]int, i, j int) []int {
	if p[i][j] == 0 {
		return nil
	}

	k := p[i][j]

	left := constructSolution(p, i, k)
	right := constructSolution(p, k, j)

	result := append(left, k)
	result = append(result, right...)

	return result
}

func main() {
	s := []int{0, 1, 3, 0, 5, 3, 5, 6}
	f := []int{0, 4, 5, 6, 7, 8, 9 ,10}

	maxActivitiesSet, maxSize := dynamicActivitySelector(s[1:], f[1:])

	fmt.Println("最大兼容活动集:", maxActivitiesSet)
	fmt.Println("最大兼容活动集的大小:", maxSize)
}

该代码使用动态规划算法解决活动选择问题。首先创建一个二维数组c和p,其中c[i][j]表示子问题(i,j)的最大兼容活动集的大小,p[i][j]记录构成子问题(i,j)最大兼容活动集的左侧第一个被选中的活动下标。然后按照递归式(16.2)进行计算并填表。最后根据p数组构造出最大兼容活动集。

相比于贪心算法GREEDY-ACTIVITY-SELECTOR,动态规划算法的时间复杂度为O(n^3),其中n是活动的个数。因此,在实际运行中,GREEDY-ACTIVITY-SELECTOR算法通常比动态规划算法更快。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

kimi,代码不能运行:

在活动选择问题中,我们有一个活动列表,每个活动都有一个开始时间 start[i] 和结束时间 end[i]。我们的目标是选择最大的兼容活动集,即没有两个活动重叠(即对于任意两个活动 A 和 B,如果 A 的结束时间小于或等于 B 的开始时间,则 A 和 B 兼容)。

递归式 (16.2) 定义了 c[i, j] 为在活动列表的前 j 个活动中选择的兼容活动集的最大大小,且这些活动在 start[i]end[i] 之间结束。为了设计一个动态规划算法,我们需要维护一个二维数组 c,其中 c[i][j] 表示在考虑前 j 个活动时,以第 i 个活动结束的活动集的最大大小。

以下是使用 Go 语言实现的动态规划算法:

package main

import (
	"fmt"
)

// Activity 结构体表示一个活动,包含开始时间和结束时间
type Activity struct {
	start int
	end   int
}

// maxActivitySet 函数计算最大兼容活动集的大小并生成最大集本身
func maxActivitySet(activities []Activity) (int, []int) {
	n := len(activities)
	c := make([][]int, n)
	for i := range c {
		c[i] = make([]int, n)
	}

	// 初始化 c 数组
	for i := range c {
		c[i][i] = 1 // 单个活动本身就是一个兼容集
	}

	// 动态规划计算 c 数组
	for length := 2; length <= n; length++ {
		for i := 0; i <= n-length; i++ {
			j := i + length - 1
			if activities[i].end <= activities[j].start {
				// 如果活动 i 和 j 不重叠,取两者的最大兼容集
				c[i][j] = max(c[i][k]+1, c[k+1][j]) for k := i; k < j; k++
			} else {
				// 如果活动 i 和 j 重叠,取不包含 i 的兼容集
				c[i][j] = c[i+1][j]
			}
		}
	}

	// 回溯找到最大兼容集
	maxSize := 0
	maxSet := make([]int, 0)
	for i := 0; i < n; i++ {
		if c[0][i] > maxSize {
			maxSize = c[0][i]
			maxSet = make([]int, maxSize)
			for k := 0; k < maxSize; k++ {
				maxSet[k] = activities[i-k].end
			}
		}
	}

	return maxSize, maxSet
}

// max 辅助函数,返回两个整数中的最大值
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	activities := []Activity{
		{1, 4},
		{2, 5},
		{3, 5},
		{4, 6},
		{5, 6},
		{6, 8},
		{7, 9},
		{8, 11},
		{9, 12},
	}
	size, set := maxActivitySet(activities)
	fmt.Printf("Max size of compatible activity set: %d\n", size)
	fmt.Printf("Max compatible activity set: %v\n", set)
}

在这个实现中,我们首先初始化一个二维数组 c,然后使用动态规划填充这个数组。对于每一对活动 (i, j),我们检查它们是否重叠。如果不重叠,我们尝试将活动 i 添加到以活动 j 结束的兼容集中,并更新 c[i][j]。如果活动 ij 重叠,我们直接取 c[i+1][j] 的值。最后,我们回溯 c 数组以找到最大兼容集。

GREEDY-ACTIVITY-SELECTOR 是一个贪心算法,它在每一步选择结束时间最早的活动,直到没有更多活动可以添加到当前选择的集合中。这个算法的时间复杂度是 O(n^2),因为它需要对每一对活动进行比较。

与贪心算法相比,动态规划算法的时间复杂度是 O(n^3),因为我们需要三层嵌套循环来填充 c 数组。尽管动态规划算法在最坏情况下可能比贪心算法慢,但它能够找到全局最优解,而贪心算法可能只能找到局部最优解。在实际应用中,如果活动数量不多,动态规划算法是一个很好的选择。如果活动数量很大,可能需要考虑更高效的算法,如基于排序的贪心算法,其时间复杂度为 O(n log n)。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

混元,代码不能运行:

以下是使用 Go 语言实现的一个动态规划算法,用于解决活动选择问题。该算法根据递归式 (16.2) 计算最大兼容活动集的大小 c[i, j],并生成最大集本身。输入的活动已按公式 (16.1) 排好序。

package main

import (
	"fmt"
)

type Activity struct {
	Start int
	End   int
}

func activitySelection(activities []Activity) (int, []Activity) {
	n := len(activities)
	c := make([][]int, n)
	for i := range c {
		c[i] = make([]int, n)
	}

	for i := 0; i < n; i++ {
		c[i][i] = 1
	}

	for l := 2; l <= n; l++ {
		for i := 0; i <= n-l; i++ {
			j := i + l - 1
			if activities[j].Start >= activities[i].End {
				c[i][j] = c[i][j-1] + 1
			} else {
				c[i][j] = c[i][j-1]
			}
		}
	}

	maxSize := 0
	maxIndex := 0
	for i := 0; i < n; i++ {
		if c[i][n-1] > maxSize {
			maxSize = c[i][n-1]
			maxIndex = i
		}
	}

	result := make([]Activity, maxSize)
	index := maxIndex
	for i := n - 1; i >= 0; i-- {
		if c[index][i] == c[index][i-1]+1 {
			result[maxSize-1] = activities[i]
			maxSize--
			index = i - 1
		}
	}

	return maxSize, result
}

func main() {
	activities := []Activity{
		{1, 2},
		{3, 4},
		{0, 6},
		{5, 7},
		{8, 9},
		{5, 9},
	}

	size, maxCompatibleActivities := activitySelection(activities)
	fmt.Printf("The size of the maximum compatible activity set is: %d\n", size)
	fmt.Println("The maximum compatible activity set is:")
	for _, activity := range maxCompatibleActivities {
		fmt.Printf("Start: %d, End: %d\n", activity.Start, activity.End)
	}
}

GREEDY-ACTIVITY-SELECTOR 算法相比,动态规划算法的运行时间为 O(n^2),而贪心算法的运行时间为 O(n)。动态规划算法可以找到最大兼容活动集的大小以及生成最大集本身,而贪心算法只能找到最大兼容活动集的大小。在某些情况下,动态规划算法可能会比贪心算法更适用,因为它可以提供更多的信息。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

阿里云和腾讯云区别价格表,云服务器费用对比2024年最新

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

利用tree命令自动保存文件层级结构

tree命令的使用 为了将上图左侧的文件目录&#xff0c;生成上图右侧中的文件夹结构列表&#xff0c;保存在txt中&#xff0c;使用了如下cmd命令&#xff1a; C:\armadillo-12.8.0>tree .>list.txt以上tree命令分为3部分&#xff1a; tree 命令. 在当前目录>list.tx…

ChatGPT:人工智能的革命与未来

引言 随着人工智能技术的飞速发展&#xff0c;ChatGPT作为OpenAI推出的一款语言模型&#xff0c;已经引起了广泛的关注和讨论。它不仅改变了我们与机器交流的方式&#xff0c;还为众多行业的发展带来了革命性的影响。本文将深入探讨ChatGPT的技术原理、应用场景以及它对未来的…

一些硬件知识(六)

防反接设计&#xff1a; 同步电路和异步电路的区别: 同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源&#xff0c;因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。 异步电路:电路没有统一的时钟&#xff0c;有些触发器的时钟输入端与时钟脉冲源相连…

【HarmonyOS】ArkTS-箭头函数

箭头函数 箭头函数是 比普通函数 更简洁 的一种函数写法 () > {}() > {// 函数体 }let 函数名 () > {// 函数体 }let 函数名 () > {// 函数体 } 函数名(实参1, 实参2)let 函数名 (形参1: 类型, 形参2: 类型) > {// 函数体 } 函数名(实参1, 实参2)let 函数名 …

【嵌入式】嵌入式系统稳定性建设:静态代码扫描的稳定性提升术

1. 概述 在嵌入式系统开发过程中&#xff0c;代码的稳定性和可靠性至关重要。静态代码扫描工具作为一种自动化的代码质量检查手段&#xff0c;能够帮助开发者在编译前发现潜在的缺陷和错误&#xff0c;从而增强系统的稳定性。本文将介绍如何在嵌入式C/C开发中使用静态代码扫描…

嵌入式学习第二十五天!(网络的概念、UDP编程)

网络&#xff1a; 可以用来&#xff1a;数据传输、数据共享 1. 网络协议模型&#xff1a; 1. OSI协议模型&#xff1a; 应用层实际收发的数据表示层发送的数据是否加密会话层是否建立会话连接传输层数据传输的方式&#xff08;数据包&#xff0c;流式&#xff09;网络层数据的…

Day22:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

目录 开发环境 数据导入-mysql架构&库表列 数据库操作-mysqli函数&增删改查 数据接收输出-html混编&超全局变量 第三方插件引用-js传参&函数对象调用 完整源码 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0…

Python爬虫——scrapy-3

目录 免责声明 任务 文件简介 爬取当当网内容单管道 pipelines.py items.py setting dang.py 当当网多管道下载图片 pipelines.py settings 当当网多页下载 dang.py pielines.py settings items.py 总结 免责声明 该文章用于学习&#xff0c;无任何商业用途 …

深度学习-2.3损失函数

文章目录 损失函数深度学习优化思想回归&#xff1a;误差平方和SSE二分类交叉熵损失函数1. 极大似然函数估计求解二分类交叉熵函数2.用tensor实现二分类交叉熵损失 多分类交叉熵损失函数1.由二分类推广到多分类2.用PyTorch实现多分类交叉熵损失 损失函数 在之前的文章中&#…

OpenAI劲敌吹新风! Claude 3正式发布,Claude3使用指南

Claude 3是什么&#xff1f; 是Anthropic 实验室近期推出的 Claude 3 大规模语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;系列&#xff0c;代表了人工智能技术的一个显著飞跃。 该系列包括三个不同定位的子模型&#xff1a;Claude 3 Haiku、Claude 3…

Chapter20-Ideal gases-CIE课本要点摘录、总结(编辑中)

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下&#xff1a; average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP&#xff08;standard temperature and pressure&#xff09; Standard Temperature and Pres…

如何使用WinSCP结合Cpolar实现公网远程访问内网Linux服务器

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

linux上安装fastdfs及配置

一、基础环境准备 1、所需软件 名称说明libfastcommonfastdfs分离出的一些公用函数包fastdfsfastdas软件包fastdfs-nginx-modulefastdfst和nginx的关联模块nginxnginxl软件包 2、编辑环境 安装一些基础的支持环境 yum install git gccc gcc-c make automake autoconf libto…

图遍历算法

图的遍历算法有两种&#xff1a;深度优先遍历、广度优先遍历算法。 深度优先遍历算法就是从起始结点开始&#xff0c;只要有相邻且未被访问的结点就要直接进行访问&#xff0c;直到最后不能向下遍历为止&#xff0c;再回溯寻找下一个策略。 广度优先遍历算法&#xff0c;就是从…

线性代数笔记13--正交向量和正交子空间

0. 四个子空间 1. 正交向量 两向量点乘为0&#xff0c;向量正交。 A ⊤ B 0 A^{\top}B0 A⊤B0 勾股定理 ∣ ∣ x ∣ ∣ 2 ∣ ∣ y 2 ∣ ∣ ∣ ∣ x y ∣ ∣ 2 ||x||^2||y^2||||xy||^2 ∣∣x∣∣2∣∣y2∣∣∣∣xy∣∣2 验证正交条件 ∣ ∣ x ∣ ∣ 2 x ⊤ x x x ⊤ ∣…

vue2【详解】生命周期(含父子组件的生命周期顺序)

1——beforeCreate&#xff1a;在内存中创建出vue实例&#xff0c;数据观测 (data observer) 和 event/watcher 事件配置还没调用&#xff08;data 和 methods 属性还没初始化&#xff09; 【执行数据观测 (data observer) 和 event/watcher 事件配置】 2——created&#xf…

前TVB「御用泼妇」原来是亿万富婆,离婚后狂买楼养大子女。

今年72岁的昔日TVB老戏骨陈曼娜Manna姐最近突然亮相隔壁ViuTV的新剧《飞黄腾达》&#xff0c;本色出演炒股女富豪&#xff0c;她大赞剧集监制、导演有眼光&#xff0c;角色的背景与她本身十分相似&#xff0c;演起来可谓得心应手。 众所周知&#xff0c;陈曼娜最爱「买砖头」&a…

跟无神学AI之Tensorflow笔记搭建网络八股

虽然Pytorch在论文中使用较多&#xff0c;但是像Alphafold在蛋白质结构预测的模型&#xff0c;仍然是用Tensorflow写成&#xff0c;遂近期在学其中的语法。 本系列来自慕课北大软微曹健老师的Tensorflow笔记&#xff0c;摘选其中重要部分。 1.导包 2.定义训练集测试集和数据…

平台工程指南:从架构构建到职责分工

平台工程只是 DevOps 专业化的另一个术语&#xff0c;还是另有所指&#xff1f;事实可能介于两者之间。DevOps 及其相关的 DevXOps 有着浓厚的文化色彩&#xff0c;以各个团队为中心。不幸的是&#xff0c;在许多地方&#xff0c;DevOps 引发了新的问题&#xff0c;如工具激增和…