求教大神一个关于时间复杂度的有关问题

求教大神一个关于时间复杂度的问题
小弟最近正在上算法课
老是留了一作业 给了一本单词表的文档(里面只有单词本身) 然后读取里面的内容 找出最长的单词 单词平均长度什么的
但部分都解决了 但是还有一个问题没有解决
给出下面一个方法 判断该单词是否为字典顺序:

bool alpha(string s){
int ln = s.size();
for (int i = 0; i < ln - 1; ++i){
if (s[i] > s[i+1]){
return false;
}
}
return true;
}

然后 考虑平均每个单词的比较次数 并给出时间复杂度 并举例最坏的情况。

最坏的情况肯定是这个单词是按字典顺序的 比如单词ABC 就得O(N^2)最好的情况是每个就比较了第一个和第二个字母 然后就发现不是字母顺序直接返回一个FALSE

那么平均的次数怎么求呢? 而且这个方法的时间复杂度是O(N^2)吗?
我刚学不太懂 求指教!
算法  算法 时间复杂度 字典顺序

------解决方案--------------------
该算法的复杂度为O(n),平均每个单词的比较次数与文本中单词长度的分布规律有关,不知道有没有更好的算法是否可以使复杂度降低到O(lgn)
------解决方案--------------------
引用:
引用:该算法的复杂度为O(n),平均每个单词的比较次数与文本中单词长度的分布规律有关,不知道有没有更好的算法是否可以使复杂度降低到O(lgn)

为什么是O(N)? 不好意思 我可能没有表达清楚 我说O(n^2)是因为每读取一个新单词就得执行至少一次这个判断循环不是么? 一个单词本 里面20W个单词 平均每个单词要比较多少次? 我……
每个单词只有一次循环啊,当然是O(n)

------解决方案--------------------
引用:
引用:该算法的复杂度为O(n),平均每个单词的比较次数与文本中单词长度的分布规律有关,不知道有没有更好的算法是否可以使复杂度降低到O(lgn)

为什么是O(N)? 不好意思 我可能没有表达清楚 我说O(n^2)是因为每读取一个新单词就得执行至少一次这个判断循环不是么? 一个单词本 里面20W个单词 平均每个单词要比较多少次? 我……


可以考虑给程序中添加一个计数器变量,根据计数器推算出每个单词的平均比较次数
------解决方案--------------------
引用:
引用:该算法的复杂度为O(n),平均每个单词的比较次数与文本中单词长度的分布规律有关,不知道有没有更好的算法是否可以使复杂度降低到O(lgn)

为什么是O(N)? 不好意思 我可能没有表达清楚 我说O(n^2)是因为每读取一个新单词就得执行至少一次这个判断循环不是么? 一个单词本 里面20W个单词 平均每个单词要比较多少次? 我……


给出时间复杂度的同时必须给出其中变量的含义。你先要确定n代表单词长度还是单词数量。如果用两个变量m,n分别表示的话,时间复杂度是O(mn),不能写成O(n^2)。

只针对一个单词的话,n=1,时间复杂度是O(m)。针对大量单词的话,如果忽略m的变化,时间复杂度O(n)。