博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序列元素互异性算法
阅读量:4983 次
发布时间:2019-06-12

本文共 1242 字,大约阅读时间需要 4 分钟。

概念

在Python中,list,tuple等数据类型中的元素可以重复,不同于set类型(set中不存在重复元素)。应此,必然存在相应的算法以检验序列是否存在重复元素。

实现一

def unique1(S):    """Return True if there are no duplicate elements in sequence S"""    for j in range(len(S)):        for k in range(j + 1, len(S)):            if S[j] == S[k]:                return False    # found duplicate pair    return True                 # if we reach this, elements were unique

实现一的思想很简单,外层循环遍历序列中的每一个值,从左至右。S[0]和S[1]...,...S[n - 1]逐一比较,S[1]和S[2]...,...S[n - 1]逐一比较,直到S[n-2]和S[n-1]比较,则遍历结束。

上述的比较次数为(n - 1) + (n - 2) + …… + 2 + 1。因此,总的时间复杂度为O( $ n^2 $)。

实现二

def unique2(S):    """Return True if there are no duplicate elements in sequence S"""    temp = sorted(S)    for j in range(1, len(temp)):        if temp[j - 1] == temp[j]:            return False        # found duplicate pair    return True                 # if we reach this, elements were unique

由代码示例可知,首先通过Python内置的排序函数进行排序,默认由小到大排序。排序前若序列中存在相同的元素,则排序后,相同的元素的位置相邻。例如,a = [5, 3, 2, 3, 4],b = sorted(a),则b = [2, 3, 3, 4, 5]。应此,在对序列进行循环遍历时,只需要比较相邻的元素是否相等。若从左到右依次比较,均无相等的元素,则序列中的元素互异。

  • 内置函数sorted,生成原始序列排序后的一份拷贝。其最大时间复杂度为O(n$ \log $n)。以后讲到排序算法时单独分析其时间复杂度。
  • 循环语句中,遍历序列长度为n,则其时间复杂度为O(n)。应此,整个算法的时间复杂度为O(n$ \log $n)。

转载于:https://www.cnblogs.com/jeffrey-yang/p/9203654.html

你可能感兴趣的文章
20165219 课上内容补做
查看>>
Tomcat7.0与Oracle10数据库连接池配置
查看>>
解决webpack和gulp打包js时ES6转译ES5时Object.assign()方法没转译成功的问题
查看>>
字节流与字符流的区别详解(转)
查看>>
类操作数据库
查看>>
找球号(一)
查看>>
oracle ebs 笔记
查看>>
Android studio使用git-android学习之旅(79)
查看>>
eclipse中去掉Js/javsscript报错信息
查看>>
网络中,FIFO、LRU、OPT这三种置换算法的缺页次数
查看>>
随机森林算法参数调优
查看>>
read命令读取用户输入
查看>>
Mysql编写定时任务事件
查看>>
路由器/交换机/集线器的区别收集(转)
查看>>
今日头条面试题汇总
查看>>
hdu 1305 Immediate Decodability
查看>>
基本数据类型
查看>>
laravel 配置sql日志
查看>>
基于注意力机制的群组推荐算法
查看>>
Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭...
查看>>