一、根据递归式(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)。动态规划算法可以找到最大兼容活动集的大小以及生成最大集本身,而贪心算法只能找到最大兼容活动集的大小。在某些情况下,动态规划算法可能会比贪心算法更适用,因为它可以提供更多的信息。

文心一言 VS 讯飞星火 VS chatgpt (210)-- 算法导论16.1 1题的更多相关文章

  1. 【对比】文心一言对飚ChatGPT实操对比体验

    前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...

  2. 【个人首测】百度文心一言 VS ChatGPT GPT-4

    昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...

  3. 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入

    "文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...

  4. 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果

    百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...

  5. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  6. 阿里版ChatGPT:通义千问pk文心一言

    随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...

  7. 基于讯飞语音API应用开发之——离线词典构建

    最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的API,顺藤摸瓜找到了科大讯飞,虽然度娘自家也有语音识别.语义理解这块,但感觉应该不是很好用,毕竟之前用过百度地图的API,有问题也找不 ...

  8. android用讯飞实现TTS语音合成 实现中文版

    Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...

  9. android讯飞语音开发常遇到的问题

    场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...

  10. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

随机推荐

  1. win11和win10的快捷键列表

    win11特有的快捷键 win键就是图案是windows图标的那个按键 作用 快捷键 打开快速设置,win11是展开音量,wifi,蓝牙的设置项,win10也可以用 win + a 打开通知中心和日历 ...

  2. pycharm的docstring多了一行type

    注释中多了一行:type 设置为Epytext PyCharm 2020.3.5 (Community Edition) def test(param1,param2,param3): "& ...

  3. github clone或访问慢

    做技术的我们经常会访问github.com,有时出现github访问非常慢或者git clone速度很慢,git push也很慢 原因很简单:github被高高的墙屏蔽了. 所以解决方案就是手动把 c ...

  4. 小白学k8s(4)使用k8s发布go应用

    k8s发布go应用 前言 部署 镜像打包 编写yaml文件 使用ingress 什么是ingress呢 ingress与ingress-controller ingress 部署ingress 配置i ...

  5. 人工智能自然语言处理:N-gram和TF-IDF模型详解

    人工智能自然语言处理:N-gram和TF-IDF模型详解 1.N-gram 模型 N-Gram 是一种基于统计语言模型的算法.它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成 ...

  6. C/C++ 关于运算符重载笔记

    加号运算符重载: 重载加号运算符,让 p3 = p1 + p2 改成 p3.mage = p1.mage + p2.mage 实现两个数据成员的相加. 告诉编译器,两个类中的数据成员应该怎么相加. 成 ...

  7. C/C++ 监控磁盘与目录操作

    遍历磁盘容量: #include <stdio.h> #include <Windows.h> void GetDrivesType(const char* lpRootPat ...

  8. 常见的WCF面试问题

    WCF和ASMX WebService的区别是什么? 最基本的区别在于,ASMX或者ASP.NET WebService是用来通过基于HTTP的SOAP来实现通讯.但WCF可以使用任意协议(HTTP, ...

  9. 绝对凶器!NVIDIA Titan Z细节全曝光

    AMD Radeon R9 295X2已经拉开了新一代双芯卡皇大战的序幕,接下来就等NVIDIA GeForce GTX Titan Z的登场了.最新消息显示,它比原计划推迟了一个星期,将在5月8日正 ...

  10. 使用私有gitlab搭建gitbook持续集成

    目录 环境搭建 1. 安装 Node.js 2. 安装 gitbook 3. 安装 Gitlab Runner 4. 注册Runner gitbook 配置 1. 目录结构 2. 命令行 3. 插件 ...