Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AP-Dahmane-lynda
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lynda Dahmane
AP-Dahmane-lynda
Commits
12e4dcb7
Commit
12e4dcb7
authored
1 year ago
by
Dahmane Lynda
Browse files
Options
Downloads
Patches
Plain Diff
tp6
parent
bd10478b
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Tp6/associations/dicotrie.py
+17
-7
17 additions, 7 deletions
Tp6/associations/dicotrie.py
Tp6/associations/recherches.py
+47
-29
47 additions, 29 deletions
Tp6/associations/recherches.py
with
64 additions
and
36 deletions
Tp6/associations/dicotrie.py
+
17
−
7
View file @
12e4dcb7
...
...
@@ -34,7 +34,7 @@ class DicoTrie:
$$$ repr(DicoTrie([Association(
'
c
'
, 3), Association(
'
a
'
, 2), Association(
'
b
'
, 1)]))
"
DicoTrie([Association(
'
a
'
, 2), Association(
'
b
'
, 1), Association(
'
c
'
, 3)])
"
"""
...
return
f
"
DicoTrie(
{
self
.
liste_assos
}
"
def
__eq__
(
self
,
autre
)
->
bool
:
"""
...
...
@@ -48,7 +48,12 @@ class DicoTrie:
$$$ d1 == {
"
a
"
: 1,
"
b
"
: 2}
False
"""
...
if
len
(
self
.
liste_assos
)
==
len
(
autre
.
liste_assos
)
or
type
(
self
)
==
type
(
autre
):
for
elt
in
self
.
liste_assos
:
for
elem
in
autre
.
liste_assos
:
return
True
else
:
return
False
def
__setitem__
(
self
,
cle
:
C
,
valeur
:
V
)
->
NoneType
:
"""
...
...
@@ -57,7 +62,7 @@ class DicoTrie:
$$$ d1
DicoTrie([Association(
"
a
"
, 1), Association(
"
b
"
, 2), Association(
"
c
"
, 3)])
"""
...
self
.
liste_assos
[
cle
]
=
valeur
def
__getitem__
(
self
,
cle
:
C
)
->
V
:
"""
...
...
@@ -69,7 +74,7 @@ class DicoTrie:
$$e d1[
'
c
'
]
KeyError
"""
...
return
self
.
liste_assos
[
cle
]
def
__delitem__
(
self
,
cle
:
C
)
->
NoneType
:
"""
...
...
@@ -80,8 +85,11 @@ class DicoTrie:
$$e del d1[
'
c
'
]
KeyError
"""
...
if
isinstance
(
cle
,
str
):
self
.
supprime
(
cle
)
else
:
return
KeyError
def
__contains__
(
self
,
cle
:
C
)
->
bool
:
"""
$$$ d1 = DicoTrie([Association(
"
a
"
, 1), Association(
"
b
"
, 2)])
...
...
@@ -90,7 +98,9 @@ class DicoTrie:
$$$
'
c
'
in d1
False
"""
...
if
isinstance
(
cle
,
str
):
return
self
.
contains
(
cle
)
return
False
if
__name__
==
'
__main__
'
:
import
apl1test
...
...
This diff is collapsed.
Click to expand it.
Tp6/associations/recherches.py
+
47
−
29
View file @
12e4dcb7
...
...
@@ -50,35 +50,53 @@ def indice_seq(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
i
=
index
return
trouve
,
i
#
# def indice_dicho(elem: C, liste: list[C], comp: Callable[[C, C], int]) \
# -> tuple[bool, int]:
# """Renvoie un couple (trouve, i) tel que:
# - si elem est un élément de liste,
# * trouve = True
# * i est l'indice de première occurence de elem dans liste
# - si elem n'est pas un élément de la liste :
# * trouve = False
# * pour tout j < i, liste[j] < liste[i]
# * pour tout j > i, liste[j] > liste[i]
#
# Précondition : comp est une fonction de comparaison et liste est triée pour comp
#
# $$$ def compare(x, y): return 0 if x == y else 1 if x > y else -1
# $$$ indice_dicho(0, [1, 3, 5], compare)
# (False, 0)
# $$$ indice_dicho(3, [1, 3, 5], compare)
# (True, 1)
# $$$ indice_dicho(4, [1, 3, 5], compare)
# (False, 2)
# $$$ indice_dicho(5, [1, 3, 5], compare)
# (True, 2)
# $$$ indice_dicho(6, [1, 3, 5], compare)
# (False, 3)
# $$$ indice_dicho(42, [], compare)
# (False, 0)
# """
#
def
indice_dicho
(
elem
:
C
,
liste
:
list
[
C
],
comp
:
Callable
[[
C
,
C
],
int
])
\
->
tuple
[
bool
,
int
]:
"""
Renvoie un couple (trouve, i) tel que:
- si elem est un élément de liste,
* trouve = True
* i est l
'
indice de première occurence de elem dans liste
- si elem n
'
est pas un élément de la liste :
* trouve = False
* pour tout j < i, liste[j] < liste[i]
* pour tout j > i, liste[j] > liste[i]
Précondition : comp est une fonction de comparaison et liste est triée pour comp
$$$ def compare(x, y): return 0 if x == y else 1 if x > y else -1
$$$ indice_dicho(0, [1, 3, 5], compare)
(False, 0)
$$$ indice_dicho(3, [1, 3, 5], compare)
(True, 1)
$$$ indice_dicho(4, [1, 3, 5], compare)
(False, 2)
$$$ indice_dicho(5, [1, 3, 5], compare)
(True, 2)
$$$ indice_dicho(6, [1, 3, 5], compare)
(False, 3)
$$$ indice_dicho(42, [], compare)
(False, 0)
"""
debut
=
0
i
=
len
(
liste
)
trouvr
=
False
fin
=
len
(
liste
)
-
1
while
debut
<=
fin
:
milieu
=
(
debut
+
fin
)
//
2
if
comp
(
elem
,
liste
[
milieu
])
==
0
:
trouve
=
True
i
=
milieu
elif
comp
(
elem
,
liste
[
milieu
])
<
0
:
fin
=
milieu
-
1
else
:
debut
=
milieu
+
1
return
trouve
,
i
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment