forked from UNN/2026-rff_mp
91 lines
3.0 KiB
Go
91 lines
3.0 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
// hash_table "hash-table-task/hash-table"
|
||
|
||
ds "source/pkg/data_struct"
|
||
ht "source/pkg/structures/hash_table"
|
||
)
|
||
|
||
/*
|
||
|
||
1. Сконструировать и реализовать свою хеш таблицу
|
||
|
||
- изначальный размер 8, коэф-т загрузки 0.75
|
||
|
||
- Преобразование подаваемого данного в индекс с помощью хеш функции(в ручну) пример: полиномиальный хеш
|
||
|
||
- Коллизии обрабатываются методом цепочек, каждая корзина таблицы - список в котором хранятся пары значений key-value
|
||
|
||
- При превышении коэф-та загрузки происходит перехеширование таблицы, размер увеличивается вдвое, все пары заново вставляются в таблицу.
|
||
|
||
2. Читаем текстовый файл, разбивает на слова, приводим к нижнему регистру, подсчитываем повторения каждого слова: key - слово, value - кол-во повторений
|
||
|
||
- На вывод 10 самых встречающихся слов, для каждого слова выводим: ind(hash), key, value
|
||
- Текст - первая глава, первые три стиха Евгений Онегин
|
||
|
||
*/
|
||
|
||
func main() {
|
||
fmt.Println("hello world")
|
||
head := ht.NewHashTable(8, 0.75)
|
||
|
||
for i := 1; i <= 40; i++ {
|
||
name := fmt.Sprintf("User_%02d", i)
|
||
phone := fmt.Sprintf("Phone_%02d", i)
|
||
head.Insert(*ds.NewData(name, phone))
|
||
}
|
||
|
||
head.Print()
|
||
|
||
head.Delete("User_05")
|
||
fmt.Println("Удаляем User_05")
|
||
|
||
head.Print()
|
||
|
||
fmt.Println(head.Search("User_07"))
|
||
|
||
// Чтение всего файла
|
||
|
||
// const filePath = "../data/onegin.txt"
|
||
// // const filePath = "../data/onegin_full.txt"
|
||
|
||
// data, err := os.ReadFile(filePath)
|
||
// text := string(data)
|
||
// if err != nil {
|
||
// fmt.Println("Ошибка чтения файла:", err)
|
||
// return
|
||
// }
|
||
// fmt.Println(text)
|
||
|
||
// text = strings.ToLower(text)
|
||
|
||
// // Разбиение на слова (разделители: пробелы и переводы строк)
|
||
// re := regexp.MustCompile(`[\p{L}\p{N}-]+`)
|
||
// words := re.FindAllString(text, -1)
|
||
|
||
// fmt.Printf("Найдено слов: %d\n", len(words))
|
||
// for i, word := range words {
|
||
// fmt.Printf("Слово %d: %s\n", i+1, word)
|
||
// }
|
||
|
||
// hashTable := ht.NewHashTable(8, 0.95)
|
||
|
||
// for i, word := range words {
|
||
// fmt.Printf("%d : %s\n", i, word)
|
||
// hashTable.Put(word, 1)
|
||
// }
|
||
|
||
// fmt.Println("\nХеш таблица текста: ")
|
||
// hashTable.Print()
|
||
|
||
// // fmt.Println("Отсортированные ячейки таблицы: ")
|
||
// // hashTable.PrintSort()
|
||
|
||
// fmt.Println("\nСамые часто встречающиеся слова: ")
|
||
|
||
// // hashTable.PrintMostPopularWords(10)
|
||
}
|