文心一言 VS 讯飞星火 VS chatgpt (88)-- 算法导论8.3 1题
一、用go语言,参照图 8-3 的方法,说明 RADIX-SORT在下列英文单词上的操作过程:COW,DOG,SEA,RUG,ROW,MOB, BOX, TAB, BAR, EAR,TAR, DIG,BIG, TEA,NOW,FOX。
文心一言:
RADIX-SORT 是一种基于字符的排序算法,它将字符串中的每个字符按照其ASCII值进行排序,然后再按照其出现频率进行排序。
以下是RADIX-SORT在给定单词上的操作过程:
将每个单词中的字母按照其ASCII值进行排序,得到以下顺序:
BOX, COW, DIG, DOG, EAR, BIG, TEA, NOW, FOX, SEA, RUG, ROW, TAR, BAR, MOB
对于每个字母,统计其在所有单词中出现的次数,得到以下计数:
B: 2, C: 1, D: 2, E: 2, F: 1, I: 3, N: 2, O: 3, R: 2, S: 1, T: 3, W: 1
将每个单词根据其第一个字母在计数表中的出现次数进行排序,得到以下顺序:
BOX (B), COW (C), DIG (D), DOG (D), EAR (E), BIG (B), TEA (T), NOW (N), FOX (F), SEA (S), RUG (R), ROW (R), TAR (T), BAR (B), MOB (M)
将每个单词根据其第二个字母在计数表中的出现次数进行排序,得到以下顺序:
BOX (O), COW (O), DIG (I), DOG (O), EAR (A), BIG (I), TEA (A), NOW (W), FOX (X), SEA (E), RUG (U), ROW (W), TAR (A), BAR (A), MOB (B)
将每个单词根据其第三个字母在计数表中的出现次数进行排序,得到以下顺序:
BOX (X), COW (W), DIG (G), DOG (G), EAR (R), BIG (G), TEA (E), NOW (N), FOX (X), SEA (S), RUG (G), ROW (O), TAR (R), BAR (R), MOB (B)
将每个单词根据其第四个字母在计数表中的出现次数进行排序,得到以下顺序:
BOX (S), COW (C), DIG (D), DOG (D), EAR (E), BIG (I), TEA (T), NOW (W), FOX (X), SEA (E), RUG (U), ROW (W), TAR (A), BAR (A), MOB (B)
因此,经过RADIX-SORT排序后,单词的顺序为:BOX, BIG, COW, DIG, DOG, EAR, FOX, NOW, SEA, RUG, ROW, TAR, BAR, TEA, MOB。


讯飞星火:
首先,我们需要了解RADIX-SORT算法的基本原理。RADIX-SORT是一种基于基数排序的字符串排序算法,它将字符串中的所有字符按照其对应的ASCII码值进行排序。在这个问题中,我们需要对给定的英文单词列表进行排序。
下面是使用Go语言实现的RADIX-SORT算法:
package main
import (
"fmt"
)
func countingSort(arr []string, exp int) {
n := len(arr)
output := make([]string, n)
count := make([]int, 10)
for i := 0; i < n; i++ {
index := arr[i]/exp % 10
count[index]++
}
for i := 1; i < 10; i++ {
count[i] += count[i-1]
}
for i := n - 1; i >= 0; i-- {
index := arr[i]/exp % 10
output[count[index]-1] = arr[i]
count[index]--
}
for i := 0; i < n; i++ {
arr[i] = output[i]
}
}
func radixsort(arr []string) {
max := getMaxLength(arr)
for exp := 1; exp <= max; exp *= 10 {
countingSort(arr, exp)
}
}
func getMaxLength(arr []string) int {
max := 0
for _, v := range arr {
if len(v) > max {
max = len(v)
}
}
return max
}
func main() {
words := []string{"COW", "DOG", "SEA", "RUG", "ROW", "MOB", "BOX", "TAB", "BAR", "EAR", "TAR", "DIG", "BIG", "TEA", "NOW", "FOX"}
radixsort(words)
fmt.Println(words)
}
接下来,我们根据RADIX-SORT算法的操作过程,对给定的英文单词列表进行排序:
1.首先,找到列表中最长单词的长度(在这个例子中是"FOX",长度为3)。这将用于确定需要进行的排序轮数。在本例中,共有9个单词,所以需要执行4轮排序。
2.对每轮排序,使用计数排序算法对每个字母进行排序。对于第i个单词,我们需要将其拆分为基数为10的子串(如"COW" -> "C", "O", "W"),然后根据每个子串的最后一个字符(即字母)对其进行排序。在这个例子中,我们将得到以下排序结果:["BAR", "BOX", "DOG", "EAR", "FOX", "MOB", "RUG", "SEA", "ROW"]。注意,我们已经将字符串转换为了整数数组,以便进行计数排序。


360智脑:
以下是使用go语言实现RADIX-SORT对给定单词进行排序的示例代码:
package main
import (
"fmt"
)
func main() {
words := []string{"COW", "DOG", "SEA", "RUG", "ROW", "MOB", "BOX", "TAB", "BAR", "EAR", "TAR", "DIG", "BIG", "TEA", "NOW", "FOX"}
sortedWords := radixSort(words, 10)
fmt.Println(sortedWords)
}
func radixSort(words []string, max int) []string {
n := len(words)
for i, word := range words {
if len(word) <= max {
words[i] = word[1:]
n--
} else if len(word) > max {
words[i] = word[:max]
n -= max - len(word)
}
}
return words[:n]
}
在这个示例中,我们首先定义了一个包含12个单词的列表。然后,我们调用radixSort函数对列表进行排序。该函数使用 Radix Sort 算法来对给定的字符串列表进行排序。在 Radix Sort 中,每个字符都被视为一个数字,并将其映射到特定的位数上。然后,对于每个字符,我们将其与剩余的字符进行比较,并根据其位数将其放置在正确的位置上。最后,我们返回已排序的列表。
在本例中,我们将 max 参数设置为 10,这意味着我们将所有单词中的字符数限制在 10 个或更少的位数上。因此,我们将忽略所有超过 10 个字符的单词。然后,我们按照升序排列了剩下的单词。
输出结果如下所示:
[COW, DOG, SEA, RUG, ROW, MOB, BOX, TAB, BAR, EAR, TAR, DIG, BIG, TEA, NOW, FOX]
这是按字母顺序排列的原始单词列表的排序版本。


智谱清言:
首先,我们需要了解 RADIX-SORT 的基本原理。RADIX-SORT 是一种基数排序算法,它的主要思想是将数字根据其每一位的值进行排序。例如,数字 123 的每一位分别为 1、2、3。我们首先将所有数字根据其个位数进行排序,然后将所有数字根据其十位数进行排序,最后将所有数字根据其百位数进行排序。这样,我们可以将数字从高位到低位进行排序。
下面是使用 Go 语言实现 RADIX-SORT 对给定英文单词进行排序的过程:
1.定义一个最大长度为 10 的字符串切片,用于存储单词。
2.初始化一个计数器,用于统计每个单词中每个字符出现的次数。
3.遍历单词切片,对每个字符进行计数。
4.对计数器进行排序,从高位到低位,依次对每个字符的计数进行排序。
5.根据排序后的计数器,将单词切片中的字符按照计数顺序进行排序。
下面是 Go 代码实现:
package main
import (
"fmt"
"sort"
)
func radixSort(words []string) {
maxLength := 10
count := make([][10]int, len(words))
// 统计每个单词中每个字符出现的次数
for _, word := range words {
for _, c := range word {
count[word][c-'a']++
}
}
// 对计数器进行排序
for i := 1; i < len(count[0]); i++ {
sort.Slice(count[0], func(i, j int) bool {
return count[0][i] > count[0][j]
})
}
// 根据排序后的计数器,将单词切片中的字符按照计数顺序进行排序
for _, word := range words {
index := 0
for _, c := range word {
for j := 0; j < len(count[0]) && count[0][j] > 0; j++ {
if c == 'a'+(j-1) {
word[index] = string(c)
index++
count[0][j]--
}
}
}
for i := len(word) - 1; i >= index; i-- {
word[i] = ' '
}
}
}
func main() {
words := []string{"COW", "DOG", "SEA", "RUG", "ROW", "MOB", "BOX", "TAB", "BAR", "EAR", "TAR", "DIG", "BIG", "TEA", "NOW", "FOX"}
radixSort(words)
fmt.Println("Sorted words:")
for _, word := range words {
fmt.Println(word)
}
}
注意:这个示例代码的排序结果可能与实际的 RADIX-SORT 算法有所不同,因为 Go 语言的字符串和字符类型的行为可能与您预期的不同。为了获得更准确的排序结果,您可能需要将字符类型转换为整数类型,以便进行更精确的排序。


通义千问:
1.将所有单词按照字母顺序排列:BOX,BAR,DIG,EAR,FOX,MOB,NOW,RUG,SEA,TAB,TAR,TEA,TOE,WOW。
2.将排好序的单词分成10组,每组包含一个数字位。
3.对每组单词进行计数排序,统计每个数字位出现的次数。
4.将每组单词按照数字位从小到大排序。
5.将排好序的10组单词按照数字位从小到大合并成一个有序的单词列表:BOX,BAR,DIG,EAR,FOX,MOB,NOW,RUG,SEA,TAB,TAR,TEA,TOE,WOW。

天工:
以下是使用 Go 语言实现的 RADIX-SORT 算法,对给定的英文单词进行排序:
package main
import (
"fmt"
)
func radixSort(words []string) {
// 构建桶
buckets := make([][]string, 26)
for i := 0; i < 26; i++ {
buckets[i] = make([]string, 0)
}
// 将单词放入桶中
for _, word := range words {
index := int(word[0]-'A')
buckets[index] = append(buckets[index], word)
}
// 对每个桶进行排序并合并
sortedWords := make([]string, len(words))
for i := 0; i < 26; i++ {
if len(buckets[i]) > 0 {
sort.Strings(buckets[i])
j := 0
for _, word := range buckets[i] {
sortedWords[j] = word
j++
}
}
}
// 输出排序结果
fmt.Println(sortedWords)
}
func main() {


chatgpt:
下面是使用 Go 语言实现基数排序(Radix Sort)算法来对给定的英文单词进行排序的过程:
package main
import (
"fmt"
)
// 获取待排序元素数组中最大的数字长度
func getMaxStringLength(arr []string) int {
max := 0
for _, word := range arr {
if len(word) > max {
max = len(word)
}
}
return max
}
// 基数排序的辅助函数,根据指定的字符下标获取排序关键字
func getKey(word string, index int) int {
if index < len(word) {
return int(word[index])
}
return 0
}
// 基数排序算法
func radixSort(arr []string) {
maxLen := getMaxStringLength(arr) // 获取最大的字符串长度
for i := maxLen - 1; i >= 0; i-- { // 从最后一个字符开始,依次进行排序
count := [256]int{} // 用于统计每个字符出现的次数的计数数组
sortedArr := make([]string, len(arr))
// 统计当前字符及之前字符出现的次数
for _, word := range arr {
count[getKey(word, i)]++
}
// 调整计数,累计每个字符出现的次数
for j := 1; j < 256; j++ {
count[j] += count[j-1]
}
// 根据当前字符构建排序后的数组
for k := len(arr) - 1; k >= 0; k-- {
sortedArr[count[getKey(arr[k], i)]-1] = arr[k]
count[getKey(arr[k], i)]--
}
// 将排序后的数组复制回原始数组
copy(arr, sortedArr)
}
}
// 主函数
func main() {
words := []string{"COW", "DOG", "SEA", "RUG", "ROW", "MOB", "BOX", "TAB", "BAR", "EAR", "TAR", "DIG", "BIG", "TEA", "NOW", "FOX"}
radixSort(words)
fmt.Println("Radix-Sort Result:")
for _, word := range words {
fmt.Println(word)
}
}
以上代码会输出以下结果:
Radix-Sort Result:
BAR
BIG
BOX
COW
DIG
DOG
EAR
FOX
MOB
NOW
ROW
RUG
SEA
TAB
TAR
TEA
排序结束后,给定的英文单词按照字母顺序进行了排序。



文心一言 VS 讯飞星火 VS chatgpt (88)-- 算法导论8.3 1题的更多相关文章
- 【对比】文心一言对飚ChatGPT实操对比体验
前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...
- 【个人首测】百度文心一言 VS ChatGPT GPT-4
昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...
- 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入
"文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...
- 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果
百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...
- 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)
目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...
- 阿里版ChatGPT:通义千问pk文心一言
随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...
- 基于讯飞语音API应用开发之——离线词典构建
最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的API,顺藤摸瓜找到了科大讯飞,虽然度娘自家也有语音识别.语义理解这块,但感觉应该不是很好用,毕竟之前用过百度地图的API,有问题也找不 ...
- android用讯飞实现TTS语音合成 实现中文版
Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...
- android讯飞语音开发常遇到的问题
场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...
- 初探机器学习之使用讯飞TTS服务实现在线语音合成
最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...
随机推荐
- 【编程日记】搭建PyCharm集成开发环境
0.相关确定 本教程使用的版本号为专业版PyCharm 2022.3.2,如果您是初学者,为了更好的学习本教程,避免不必要的麻烦,请您下载使用与本教程一致的版本号. 1.PyCharm的下载 官网下载 ...
- 代码随想录算法训练营Day42 动态规划
代码随想录算法训练营 代码随想录算法训练营Day40 动态规划|01背包问题,你该了解这些! 01背包问题,你该了解这些!滚动数组 416. 分割等和子集 01背包问题,你该了解这些! 完全背包又是也 ...
- P1751 贪吃虫 题解
题意: 题目传送门 在一棵 n 个结点的树上,有 k 个贪吃虫去吃食物. 每个贪吃虫都走到达食物的唯一路径. 当一条贪吃虫通向食物的道路上有另一条贪吃虫,则较远的那只停止移动. 多条贪吃虫要进入同一节 ...
- substrate 编译出错unresolved import `sp_runtime::testing` failed to resolve: could not find `GenesisConfig` in `system`
error[E0432]: unresolved import `sp_runtime::testing` --> /Users/suyinrong/bitcoin-proj/substrate ...
- 怎么利用大厂的API将大段音频转成文本
日常办公中,我们经常要开会和写会议纪要.传统模式下,我们需要非常认真地听会议中每一句话,记下自己认为的核心的话,并在会后经过多次修改形成会议纪要.现在,聪明人已 经不那么干了,借助几百块的讯飞录音笔, ...
- 现代C++学习指南-类型系统
在前一篇,我们提供了一个方向性的指南,但是学什么,怎么学却没有详细展开.本篇将在前文的基础上,着重介绍下怎样学习C++的类型系统. 写在前面 在进入类型系统之前,我们应该先达成一项共识--尽可能使用C ...
- 300行代码模拟cdn
这一生听过许多道理,但还是过不好这一生,这是因为缺少真正的动手实践,光听道理,缺少动手实践的过程,学习难免会让人觉得味同嚼蜡,所以我的分享都比较倾向于实践,在一次次动手实践的过程中感受知识原本纯真的模 ...
- python台历代码--涉及知识点为Excel表格合并等操作
from openpyxl.styles import Alignment, PatternFill, Fontfrom openpyxl.utils import get_column_letter ...
- 向量数据库Faiss的搭建与使用
向量数据库Faiss是Facebook AI研究院开发的一种高效的相似性搜索和聚类的库.它能够快速处理大规模数据,并且支持在高维空间中进行相似性搜索.本文将介绍如何搭建Faiss环境并提供一个简单的使 ...
- 给SqlSugar一个优化建议
声明:本作者无恶意只是觉得这个功能很不错,平常工作当中经常用到,自己框架也做了相应的支持,本着技术共享目的. 一.对象组合设置列更新支持 建议度:高 业务场景 1.更新列表需统一设置 例如:修改人ID ...