forked from UNN/2026-rff_mp
develop #1
3
BolonkinNM/.idea/.gitignore
vendored
3
BolonkinNM/.idea/.gitignore
vendored
|
|
@ -1,3 +0,0 @@
|
||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (ds_project_archive)" project-jdk-type="Python SDK" />
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (maze_project_submission) (2)" project-jdk-type="Python SDK" />
|
||||||
</project>
|
</project>
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<modules>
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/ds_project_archive.iml" filepath="$PROJECT_DIR$/.idea/ds_project_archive.iml" />
|
<module fileurl="file://$PROJECT_DIR$/.idea/maze_project_submission.iml" filepath="$PROJECT_DIR$/.idea/maze_project_submission.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
42
BolonkinNM/.idea/workspace.xml
Normal file
42
BolonkinNM/.idea/workspace.xml
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="a6ff989d-c5f6-4522-8b0a-933849f2d044" name="Changes" comment="" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="MarkdownSettingsMigration">
|
||||||
|
<option name="stateVersion" value="1" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectColorInfo"><![CDATA[{
|
||||||
|
"associatedIndex": 2
|
||||||
|
}]]></component>
|
||||||
|
<component name="ProjectId" id="3EB20Mq0B865MSq8Kkl2evaRIZW" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
|
"last_opened_file_path": "C:/Users/vaz21/Downloads/Task 2 GLOBAL/maze_project_submission"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="a6ff989d-c5f6-4522-8b0a-933849f2d044" name="Changes" comment="" />
|
||||||
|
<created>1779637417749</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1779637417749</updated>
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -1,18 +1,24 @@
|
||||||
# Задание 1 — структуры данных
|
# Maze Solver Project
|
||||||
|
|
||||||
Процедурная реализация:
|
ООП-проект для поиска выхода из лабиринта с паттернами:
|
||||||
- linked_list.py
|
- Builder
|
||||||
- hash_table.py
|
- Strategy
|
||||||
- bst.py
|
- Observer
|
||||||
|
- Command
|
||||||
|
|
||||||
Эксперименты и отчёты:
|
## Запуск
|
||||||
- experiments.py
|
|
||||||
- plot_results.py
|
|
||||||
- results.csv
|
|
||||||
- docs/report.md
|
|
||||||
- docs/data/*.png
|
|
||||||
|
|
||||||
Запуск:
|
|
||||||
```bash
|
```bash
|
||||||
python main.py
|
python main.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Эксперименты
|
||||||
|
```bash
|
||||||
|
python experiment.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Результаты сохраняются в папку `experiment_results/`.
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -1,118 +0,0 @@
|
||||||
from typing import Any, Dict, List, Optional
|
|
||||||
|
|
||||||
|
|
||||||
Node = Dict[str, Any]
|
|
||||||
|
|
||||||
|
|
||||||
def _make_node(name: str, phone: str) -> Node:
|
|
||||||
return {"name": name, "phone": phone, "left": None, "right": None}
|
|
||||||
|
|
||||||
|
|
||||||
def bst_insert(root: Optional[Node], name: str, phone: str) -> Node:
|
|
||||||
new_node = _make_node(name, phone)
|
|
||||||
|
|
||||||
if root is None:
|
|
||||||
return new_node
|
|
||||||
|
|
||||||
current = root
|
|
||||||
parent = None
|
|
||||||
|
|
||||||
while current is not None:
|
|
||||||
parent = current
|
|
||||||
if name < current["name"]:
|
|
||||||
current = current["left"]
|
|
||||||
elif name > current["name"]:
|
|
||||||
current = current["right"]
|
|
||||||
else:
|
|
||||||
current["phone"] = phone
|
|
||||||
return root
|
|
||||||
|
|
||||||
if name < parent["name"]:
|
|
||||||
parent["left"] = new_node
|
|
||||||
else:
|
|
||||||
parent["right"] = new_node
|
|
||||||
|
|
||||||
return root
|
|
||||||
|
|
||||||
|
|
||||||
def bst_find(root: Optional[Node], name: str) -> Optional[str]:
|
|
||||||
current = root
|
|
||||||
while current is not None:
|
|
||||||
if name < current["name"]:
|
|
||||||
current = current["left"]
|
|
||||||
elif name > current["name"]:
|
|
||||||
current = current["right"]
|
|
||||||
else:
|
|
||||||
return current["phone"]
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _find_min_node(node: Node) -> Node:
|
|
||||||
current = node
|
|
||||||
while current["left"] is not None:
|
|
||||||
current = current["left"]
|
|
||||||
return current
|
|
||||||
|
|
||||||
|
|
||||||
def bst_delete(root: Optional[Node], name: str) -> Optional[Node]:
|
|
||||||
if root is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
parent = None
|
|
||||||
current = root
|
|
||||||
|
|
||||||
while current is not None and current["name"] != name:
|
|
||||||
parent = current
|
|
||||||
if name < current["name"]:
|
|
||||||
current = current["left"]
|
|
||||||
else:
|
|
||||||
current = current["right"]
|
|
||||||
|
|
||||||
if current is None:
|
|
||||||
return root
|
|
||||||
|
|
||||||
if current["left"] is None or current["right"] is None:
|
|
||||||
child = current["left"] if current["left"] is not None else current["right"]
|
|
||||||
|
|
||||||
if parent is None:
|
|
||||||
return child
|
|
||||||
|
|
||||||
if parent["left"] is current:
|
|
||||||
parent["left"] = child
|
|
||||||
else:
|
|
||||||
parent["right"] = child
|
|
||||||
return root
|
|
||||||
|
|
||||||
succ_parent = current
|
|
||||||
successor = current["right"]
|
|
||||||
while successor["left"] is not None:
|
|
||||||
succ_parent = successor
|
|
||||||
successor = successor["left"]
|
|
||||||
|
|
||||||
current["name"] = successor["name"]
|
|
||||||
current["phone"] = successor["phone"]
|
|
||||||
|
|
||||||
successor_child = successor["right"]
|
|
||||||
if succ_parent["left"] is successor:
|
|
||||||
succ_parent["left"] = successor_child
|
|
||||||
else:
|
|
||||||
succ_parent["right"] = successor_child
|
|
||||||
|
|
||||||
return root
|
|
||||||
|
|
||||||
|
|
||||||
def bst_list_all(root: Optional[Node]) -> List[Dict[str, str]]:
|
|
||||||
result: List[Dict[str, str]] = []
|
|
||||||
stack: List[Node] = []
|
|
||||||
current = root
|
|
||||||
|
|
||||||
while current is not None or stack:
|
|
||||||
while current is not None:
|
|
||||||
stack.append(current)
|
|
||||||
current = current["left"]
|
|
||||||
|
|
||||||
current = stack.pop()
|
|
||||||
result.append({"name": current["name"], "phone": current["phone"]})
|
|
||||||
current = current["right"]
|
|
||||||
|
|
||||||
return result
|
|
||||||
0
BolonkinNM/builders/__init__.py
Normal file
0
BolonkinNM/builders/__init__.py
Normal file
7
BolonkinNM/builders/maze_builder.py
Normal file
7
BolonkinNM/builders/maze_builder.py
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
|
||||||
|
class MazeBuilder(ABC):
|
||||||
|
@abstractmethod
|
||||||
|
def buildFromFile(self, filename):
|
||||||
|
raise NotImplementedError
|
||||||
52
BolonkinNM/builders/text_file_maze_builder.py
Normal file
52
BolonkinNM/builders/text_file_maze_builder.py
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
from core.cell import Cell
|
||||||
|
from core.maze import Maze
|
||||||
|
from builders.maze_builder import MazeBuilder
|
||||||
|
|
||||||
|
|
||||||
|
class TextFileMazeBuilder(MazeBuilder):
|
||||||
|
def buildFromFile(self, filename):
|
||||||
|
with open(filename, "r", encoding="utf-8") as f:
|
||||||
|
lines = [line.rstrip("\n") for line in f]
|
||||||
|
|
||||||
|
if not lines:
|
||||||
|
raise ValueError("Maze file is empty")
|
||||||
|
|
||||||
|
width = max(len(line) for line in lines)
|
||||||
|
height = len(lines)
|
||||||
|
|
||||||
|
cells = []
|
||||||
|
startCell = None
|
||||||
|
exitCell = None
|
||||||
|
|
||||||
|
for y, line in enumerate(lines):
|
||||||
|
row = []
|
||||||
|
for x in range(width):
|
||||||
|
ch = line[x] if x < len(line) else "#"
|
||||||
|
|
||||||
|
if ch == "#":
|
||||||
|
cell = Cell(x, y, isWall=True)
|
||||||
|
elif ch == "S":
|
||||||
|
if startCell is not None:
|
||||||
|
raise ValueError("Multiple start cells found")
|
||||||
|
cell = Cell(x, y, isWall=False, isStart=True)
|
||||||
|
startCell = cell
|
||||||
|
elif ch == "E":
|
||||||
|
if exitCell is not None:
|
||||||
|
raise ValueError("Multiple exit cells found")
|
||||||
|
cell = Cell(x, y, isWall=False, isExit=True)
|
||||||
|
exitCell = cell
|
||||||
|
elif ch in (" ", "."):
|
||||||
|
cell = Cell(x, y, isWall=False)
|
||||||
|
elif ch.isdigit():
|
||||||
|
cell = Cell(x, y, isWall=False, weight=max(1, int(ch)))
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unsupported symbol '{ch}' at ({x}, {y})")
|
||||||
|
row.append(cell)
|
||||||
|
cells.append(row)
|
||||||
|
|
||||||
|
if startCell is None:
|
||||||
|
raise ValueError("Start cell 'S' not found")
|
||||||
|
if exitCell is None:
|
||||||
|
raise ValueError("Exit cell 'E' not found")
|
||||||
|
|
||||||
|
return Maze(cells, width, height, startCell, exitCell)
|
||||||
0
BolonkinNM/commands/__init__.py
Normal file
0
BolonkinNM/commands/__init__.py
Normal file
11
BolonkinNM/commands/command.py
Normal file
11
BolonkinNM/commands/command.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
|
||||||
|
class Command(ABC):
|
||||||
|
@abstractmethod
|
||||||
|
def execute(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def undo(self):
|
||||||
|
raise NotImplementedError
|
||||||
37
BolonkinNM/commands/move_command.py
Normal file
37
BolonkinNM/commands/move_command.py
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
from commands.command import Command
|
||||||
|
|
||||||
|
|
||||||
|
class MoveCommand(Command):
|
||||||
|
DIRECTION_TO_DELTA = {
|
||||||
|
"W": (0, -1),
|
||||||
|
"A": (-1, 0),
|
||||||
|
"S": (0, 1),
|
||||||
|
"D": (1, 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, player, maze, direction):
|
||||||
|
self.player = player
|
||||||
|
self.maze = maze
|
||||||
|
self.direction = direction.upper()
|
||||||
|
self.previousCell = None
|
||||||
|
|
||||||
|
def execute(self):
|
||||||
|
if self.direction not in self.DIRECTION_TO_DELTA:
|
||||||
|
return False
|
||||||
|
|
||||||
|
dx, dy = self.DIRECTION_TO_DELTA[self.direction]
|
||||||
|
current = self.player.currentCell
|
||||||
|
new_cell = self.maze.getCell(current.x + dx, current.y + dy)
|
||||||
|
|
||||||
|
if new_cell is None or not new_cell.isPassable():
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.previousCell = current
|
||||||
|
self.player.setCell(new_cell)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def undo(self):
|
||||||
|
if self.previousCell is None:
|
||||||
|
return False
|
||||||
|
self.player.setCell(self.previousCell)
|
||||||
|
return True
|
||||||
0
BolonkinNM/controller/__init__.py
Normal file
0
BolonkinNM/controller/__init__.py
Normal file
30
BolonkinNM/controller/game_controller.py
Normal file
30
BolonkinNM/controller/game_controller.py
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
from commands.move_command import MoveCommand
|
||||||
|
|
||||||
|
|
||||||
|
class GameController:
|
||||||
|
def __init__(self, maze, player, view):
|
||||||
|
self.maze = maze
|
||||||
|
self.player = player
|
||||||
|
self.view = view
|
||||||
|
self.history = []
|
||||||
|
|
||||||
|
def move(self, direction):
|
||||||
|
command = MoveCommand(self.player, self.maze, direction)
|
||||||
|
if command.execute():
|
||||||
|
self.history.append(command)
|
||||||
|
self.view.update({"type": "move", "direction": direction})
|
||||||
|
self.view.render(self.maze, player_position=self.player.currentCell)
|
||||||
|
return True
|
||||||
|
print("Cannot move there")
|
||||||
|
return False
|
||||||
|
|
||||||
|
def undo(self):
|
||||||
|
if not self.history:
|
||||||
|
print("Nothing to undo")
|
||||||
|
return False
|
||||||
|
command = self.history.pop()
|
||||||
|
if command.undo():
|
||||||
|
self.view.update({"type": "undo"})
|
||||||
|
self.view.render(self.maze, player_position=self.player.currentCell)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
0
BolonkinNM/core/__init__.py
Normal file
0
BolonkinNM/core/__init__.py
Normal file
26
BolonkinNM/core/cell.py
Normal file
26
BolonkinNM/core/cell.py
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Cell:
|
||||||
|
x: int
|
||||||
|
y: int
|
||||||
|
isWall: bool = False
|
||||||
|
isStart: bool = False
|
||||||
|
isExit: bool = False
|
||||||
|
weight: int = 1
|
||||||
|
|
||||||
|
def isPassable(self):
|
||||||
|
return not self.isWall
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
parts = [f"Cell({self.x}, {self.y}"]
|
||||||
|
if self.isWall:
|
||||||
|
parts.append("WALL")
|
||||||
|
if self.isStart:
|
||||||
|
parts.append("START")
|
||||||
|
if self.isExit:
|
||||||
|
parts.append("EXIT")
|
||||||
|
if self.weight != 1:
|
||||||
|
parts.append(f"w={self.weight}")
|
||||||
|
return ", ".join(parts) + ")"
|
||||||
49
BolonkinNM/core/maze.py
Normal file
49
BolonkinNM/core/maze.py
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
class Maze:
|
||||||
|
def __init__(self, cells, width, height, startCell=None, exitCell=None):
|
||||||
|
self.cells = cells
|
||||||
|
self.width = width
|
||||||
|
self.height = height
|
||||||
|
self.startCell = startCell
|
||||||
|
self.exitCell = exitCell
|
||||||
|
|
||||||
|
def getCell(self, x, y):
|
||||||
|
if 0 <= x < self.width and 0 <= y < self.height:
|
||||||
|
return self.cells[y][x]
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getNeighbors(self, cell):
|
||||||
|
neighbors = []
|
||||||
|
for dx, dy in ((0, -1), (0, 1), (-1, 0), (1, 0)):
|
||||||
|
nx, ny = cell.x + dx, cell.y + dy
|
||||||
|
neighbor = self.getCell(nx, ny)
|
||||||
|
if neighbor is not None and neighbor.isPassable():
|
||||||
|
neighbors.append(neighbor)
|
||||||
|
return neighbors
|
||||||
|
|
||||||
|
def render_lines(self, player_position=None, path=None):
|
||||||
|
path_set = {(c.x, c.y) for c in path} if path else set()
|
||||||
|
player_pos = None if player_position is None else (player_position.x, player_position.y)
|
||||||
|
lines = []
|
||||||
|
for y in range(self.height):
|
||||||
|
row = []
|
||||||
|
for x in range(self.width):
|
||||||
|
cell = self.cells[y][x]
|
||||||
|
if player_pos == (x, y):
|
||||||
|
row.append("P")
|
||||||
|
elif cell.isStart:
|
||||||
|
row.append("S")
|
||||||
|
elif cell.isExit:
|
||||||
|
row.append("E")
|
||||||
|
elif cell.isWall:
|
||||||
|
row.append("#")
|
||||||
|
elif (x, y) in path_set:
|
||||||
|
row.append("*")
|
||||||
|
elif cell.weight > 1:
|
||||||
|
row.append(str(cell.weight))
|
||||||
|
else:
|
||||||
|
row.append(" ")
|
||||||
|
lines.append("".join(row))
|
||||||
|
return lines
|
||||||
|
|
||||||
|
def render(self, player_position=None, path=None):
|
||||||
|
return "\n".join(self.render_lines(player_position=player_position, path=path))
|
||||||
6
BolonkinNM/core/player.py
Normal file
6
BolonkinNM/core/player.py
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
class Player:
|
||||||
|
def __init__(self, currentCell):
|
||||||
|
self.currentCell = currentCell
|
||||||
|
|
||||||
|
def setCell(self, cell):
|
||||||
|
self.currentCell = cell
|
||||||
11
BolonkinNM/core/search_stats.py
Normal file
11
BolonkinNM/core/search_stats.py
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SearchStats:
|
||||||
|
timeMs: float
|
||||||
|
visitedCells: int
|
||||||
|
pathLength: int
|
||||||
|
path: list = field(default_factory=list)
|
||||||
|
found: bool = False
|
||||||
|
algorithm: str = ""
|
||||||
1
BolonkinNM/docs/README.txt
Normal file
1
BolonkinNM/docs/README.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Place report files and experiment outputs here.
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,109 +0,0 @@
|
||||||
Структура,Режим,Операция,Замер,Время (сек)
|
|
||||||
LinkedList,случайный,insert,1,4.2622492010
|
|
||||||
LinkedList,случайный,find,1,0.0314994130
|
|
||||||
LinkedList,случайный,delete,1,0.0149069000
|
|
||||||
LinkedList,случайный,insert,2,4.0154580330
|
|
||||||
LinkedList,случайный,find,2,0.0393284500
|
|
||||||
LinkedList,случайный,delete,2,0.0210732100
|
|
||||||
LinkedList,случайный,insert,3,4.0436019780
|
|
||||||
LinkedList,случайный,find,3,0.0344933660
|
|
||||||
LinkedList,случайный,delete,3,0.0152639850
|
|
||||||
LinkedList,случайный,insert,4,3.7182993220
|
|
||||||
LinkedList,случайный,find,4,0.0327698850
|
|
||||||
LinkedList,случайный,delete,4,0.0149959540
|
|
||||||
LinkedList,случайный,insert,5,3.7082228200
|
|
||||||
LinkedList,случайный,find,5,0.0303762490
|
|
||||||
LinkedList,случайный,delete,5,0.0141406560
|
|
||||||
LinkedList,случайный,insert,среднее,3.9495662708
|
|
||||||
LinkedList,случайный,find,среднее,0.0336934726
|
|
||||||
LinkedList,случайный,delete,среднее,0.0160761410
|
|
||||||
HashTable,случайный,insert,1,0.2059865770
|
|
||||||
HashTable,случайный,find,1,0.0014966100
|
|
||||||
HashTable,случайный,delete,1,0.0006891700
|
|
||||||
HashTable,случайный,insert,2,0.2024331460
|
|
||||||
HashTable,случайный,find,2,0.0015934880
|
|
||||||
HashTable,случайный,delete,2,0.0007212620
|
|
||||||
HashTable,случайный,insert,3,0.2126128040
|
|
||||||
HashTable,случайный,find,3,0.0016566220
|
|
||||||
HashTable,случайный,delete,3,0.0008358420
|
|
||||||
HashTable,случайный,insert,4,0.2157934910
|
|
||||||
HashTable,случайный,find,4,0.0015542810
|
|
||||||
HashTable,случайный,delete,4,0.0007269120
|
|
||||||
HashTable,случайный,insert,5,0.2079924580
|
|
||||||
HashTable,случайный,find,5,0.0013696990
|
|
||||||
HashTable,случайный,delete,5,0.0006616050
|
|
||||||
HashTable,случайный,insert,среднее,0.2089636952
|
|
||||||
HashTable,случайный,find,среднее,0.0015341400
|
|
||||||
HashTable,случайный,delete,среднее,0.0007269582
|
|
||||||
BST,случайный,insert,1,0.0166981280
|
|
||||||
BST,случайный,find,1,0.0001569360
|
|
||||||
BST,случайный,delete,1,0.0000917280
|
|
||||||
BST,случайный,insert,2,0.0184119040
|
|
||||||
BST,случайный,find,2,0.0001517110
|
|
||||||
BST,случайный,delete,2,0.0001163770
|
|
||||||
BST,случайный,insert,3,0.0174662270
|
|
||||||
BST,случайный,find,3,0.0001582930
|
|
||||||
BST,случайный,delete,3,0.0000892660
|
|
||||||
BST,случайный,insert,4,0.0191369100
|
|
||||||
BST,случайный,find,4,0.0002087170
|
|
||||||
BST,случайный,delete,4,0.0001067050
|
|
||||||
BST,случайный,insert,5,0.0184276900
|
|
||||||
BST,случайный,find,5,0.0002767720
|
|
||||||
BST,случайный,delete,5,0.0001067660
|
|
||||||
BST,случайный,insert,среднее,0.0180281718
|
|
||||||
BST,случайный,find,среднее,0.0001904858
|
|
||||||
BST,случайный,delete,среднее,0.0001021684
|
|
||||||
LinkedList,отсортированный,insert,1,2.9875078340
|
|
||||||
LinkedList,отсортированный,find,1,0.0237300610
|
|
||||||
LinkedList,отсортированный,delete,1,0.0111698260
|
|
||||||
LinkedList,отсортированный,insert,2,3.0573987940
|
|
||||||
LinkedList,отсортированный,find,2,0.0243270360
|
|
||||||
LinkedList,отсортированный,delete,2,0.0115366030
|
|
||||||
LinkedList,отсортированный,insert,3,2.9641987260
|
|
||||||
LinkedList,отсортированный,find,3,0.0236313330
|
|
||||||
LinkedList,отсортированный,delete,3,0.0112848510
|
|
||||||
LinkedList,отсортированный,insert,4,3.0345914950
|
|
||||||
LinkedList,отсортированный,find,4,0.0240271220
|
|
||||||
LinkedList,отсортированный,delete,4,0.0112117310
|
|
||||||
LinkedList,отсортированный,insert,5,2.9481954700
|
|
||||||
LinkedList,отсортированный,find,5,0.0239006100
|
|
||||||
LinkedList,отсортированный,delete,5,0.0110857710
|
|
||||||
LinkedList,отсортированный,insert,среднее,2.9983784638
|
|
||||||
LinkedList,отсортированный,find,среднее,0.0239232324
|
|
||||||
LinkedList,отсортированный,delete,среднее,0.0112577564
|
|
||||||
HashTable,отсортированный,insert,1,0.1997087560
|
|
||||||
HashTable,отсортированный,find,1,0.0017550400
|
|
||||||
HashTable,отсортированный,delete,1,0.0008407980
|
|
||||||
HashTable,отсортированный,insert,2,0.1968675190
|
|
||||||
HashTable,отсортированный,find,2,0.0019886760
|
|
||||||
HashTable,отсортированный,delete,2,0.0008920910
|
|
||||||
HashTable,отсортированный,insert,3,0.1907563580
|
|
||||||
HashTable,отсортированный,find,3,0.0018447440
|
|
||||||
HashTable,отсортированный,delete,3,0.0008684640
|
|
||||||
HashTable,отсортированный,insert,4,0.2625327630
|
|
||||||
HashTable,отсортированный,find,4,0.0016053140
|
|
||||||
HashTable,отсортированный,delete,4,0.0008098670
|
|
||||||
HashTable,отсортированный,insert,5,0.1936840590
|
|
||||||
HashTable,отсортированный,find,5,0.0019015160
|
|
||||||
HashTable,отсортированный,delete,5,0.0009053780
|
|
||||||
HashTable,отсортированный,insert,среднее,0.2087098910
|
|
||||||
HashTable,отсортированный,find,среднее,0.0018190580
|
|
||||||
HashTable,отсортированный,delete,среднее,0.0008633196
|
|
||||||
BST,отсортированный,insert,1,4.2195800190
|
|
||||||
BST,отсортированный,find,1,0.0389314570
|
|
||||||
BST,отсортированный,delete,1,0.0190308920
|
|
||||||
BST,отсортированный,insert,2,4.1356184250
|
|
||||||
BST,отсортированный,find,2,0.0383339310
|
|
||||||
BST,отсортированный,delete,2,0.0194247740
|
|
||||||
BST,отсортированный,insert,3,4.1204731890
|
|
||||||
BST,отсортированный,find,3,0.0388593320
|
|
||||||
BST,отсортированный,delete,3,0.0215428460
|
|
||||||
BST,отсортированный,insert,4,4.2120902370
|
|
||||||
BST,отсортированный,find,4,0.0378190250
|
|
||||||
BST,отсортированный,delete,4,0.0188528460
|
|
||||||
BST,отсортированный,insert,5,4.1304951260
|
|
||||||
BST,отсортированный,find,5,0.0359927840
|
|
||||||
BST,отсортированный,delete,5,0.0179617110
|
|
||||||
BST,отсортированный,insert,среднее,4.1636513992
|
|
||||||
BST,отсортированный,find,среднее,0.0379873058
|
|
||||||
BST,отсортированный,delete,среднее,0.0193626138
|
|
||||||
|
Gitea Version: 1.22.0 |
