Este projeto é uma aplicação interativa que permite aos usuários adicionar intervalos de horários de reuniões, verificar a compatibilidade entre os horários e agendar reuniões de forma otimizada usando o algoritmo de Weighted Interval Scheduling. Desenvolvida utilizando Next.js, TypeScript e Material-UI, a aplicação possibilita adicionar múltiplas tarefas, editar e remover tarefas, verificar conflitos de horário, e visualizar a linha do tempo das reuniões agendadas com base no peso atribuído a cada tarefa.
- Adicionar intervalos de horários para tarefas (reuniões) com campos de início e fim.
- Definir pesos das tarefas de forma automática ou manual:
- Modo automático: O sistema atribui pesos automaticamente e sequencialmente às tarefas.
- Modo manual: O usuário pode definir manualmente os pesos de cada tarefa.
- Edição de tarefas existentes com a possibilidade de alterar horários e pesos.
- Remoção de tarefas da lista de agendamentos.
- Verificação de compatibilidade entre horários (impede fim anterior ao início).
- Agendamento otimizado utilizando o algoritmo Weighted Interval Scheduling.
- Exibição visual dos intervalos de reuniões agendadas utilizando uma linha do tempo (Timeline).
- Botão para resetar as tarefas e começar novamente.
- Interface moderna e responsiva utilizando Material-UI.
O algoritmo de Weighted Interval Scheduling é usado para selecionar as tarefas que maximizam o valor total (peso) de um conjunto de tarefas sem sobreposição de horários. Cada tarefa pode ser atribuída um peso automaticamente ou manualmente.
- Ordenação por horário de término: As tarefas são ordenadas pelo horário de término, de modo a otimizar o agendamento sem sobreposição.
- Resolução Recursiva: Para cada tarefa, decide-se recursivamente se ela deve ser incluída no agendamento com base na compatibilidade com as outras tarefas.
- Combinação de Tarefas: O subconjunto de tarefas sem sobreposição que maximiza o peso total é selecionado e exibido ao usuário.
O agendamento das tarefas é exibido através de uma linha do tempo interativa utilizando o componente Timeline do Material-UI, mostrando o horário de início, o horário de fim, e o peso atribuído a cada tarefa. Além disso, o peso total das tarefas agendadas é exibido ao final.
- Node.js na versão mais atual (22.4.1 ou superior) instalado
- npm ou yarn instalado
-
Clone o repositório:
git clone [email protected]:viniciusvieira00/task-weighted-scheduling.git cd task-weighted-scheduling
-
Instale as dependências:
npm install
ou
yarn install
-
Inicie o servidor de desenvolvimento:
npm run dev
ou
yarn dev
-
Abra http://localhost:3000 no seu navegador para ver a aplicação.
Você também pode acessar a aplicação diretamente no link de deploy: task-weighted-scheduling.vercel.app
app/page.tsx: Página principal que exibe a interface para adicionar e agendar reuniões.utils/utils.ts: Algoritmo de Weighted Interval Scheduling e funções auxiliares.components/TaskList.tsx: Componente para exibir a lista de tarefas e a linha do tempo.
- Vinicius Vieira, Matrícula: 190118059
- Luciano Machado, Matrícula: 180126130